├── .editorconfig ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── krom.yml ├── .gitignore ├── .gitmodules ├── .vscode └── settings.json ├── LICENSE.md ├── README.md ├── api ├── .gitignore ├── Main.hx ├── README.md ├── api.hxml ├── dox.hxml ├── krom-resources │ ├── files.json │ ├── painter-colored.frag.d3d11 │ ├── painter-colored.vert.d3d11 │ ├── painter-image.frag.d3d11 │ ├── painter-image.vert.d3d11 │ ├── painter-text.frag.d3d11 │ ├── painter-text.vert.d3d11 │ ├── painter-video.frag.d3d11 │ └── painter-video.vert.d3d11 └── theme │ ├── config.json │ └── resources │ └── favicon.ico ├── armory.py ├── armory ├── Assets │ ├── blue_noise64.png │ ├── brdf.png │ ├── clouds_base.raw │ ├── clouds_detail.raw │ ├── clouds_map.png │ ├── font_default.ttf │ ├── font_default_full.ttf │ ├── font_license_roboto.txt │ ├── font_mono.ttf │ ├── font_mono_full.ttf │ ├── hosek │ │ ├── hosek_radiance.hdr │ │ ├── hosek_radiance_0.hdr │ │ ├── hosek_radiance_1.hdr │ │ ├── hosek_radiance_2.hdr │ │ ├── hosek_radiance_3.hdr │ │ ├── hosek_radiance_4.hdr │ │ ├── hosek_radiance_5.hdr │ │ ├── hosek_radiance_6.hdr │ │ └── hosek_radiance_7.hdr │ ├── ies │ │ ├── JellyFish.ies │ │ └── load_ies.py │ ├── noise256.png │ ├── noise64.png │ ├── noise8.png │ ├── smaa_area.png │ ├── smaa_search.png │ ├── water_base.png │ ├── water_detail.png │ └── water_foam.png ├── Shaders │ ├── blend_pass │ │ └── blend_pass.json │ ├── bloom_pass │ │ ├── bloom_pass.json │ │ ├── downsample_pass.frag.glsl │ │ └── upsample_pass.frag.glsl │ ├── blur_adaptive_pass │ │ ├── blur_adaptive_pass.frag.glsl │ │ └── blur_adaptive_pass.json │ ├── blur_bilat_blend_pass │ │ ├── blur_bilat_blend_pass.frag.glsl │ │ └── blur_bilat_blend_pass.json │ ├── blur_bilat_pass │ │ ├── blur_bilat_pass.frag.glsl │ │ └── blur_bilat_pass.json │ ├── blur_edge_pass │ │ ├── blur_edge_pass.frag.glsl │ │ └── blur_edge_pass.json │ ├── blur_pass │ │ ├── blur_pass.frag.glsl │ │ └── blur_pass.json │ ├── chromatic_aberration_pass │ │ ├── chromatic_aberration_pass.frag.glsl │ │ └── chromatic_aberration_pass.json │ ├── clear_color_depth_pass │ │ ├── clear_color_depth_pass.frag.glsl │ │ └── clear_color_depth_pass.json │ ├── clear_color_pass │ │ ├── clear_color_pass.frag.glsl │ │ └── clear_color_pass.json │ ├── clear_depth_pass │ │ ├── clear_depth_pass.frag.glsl │ │ └── clear_depth_pass.json │ ├── compositor_pass │ │ ├── compositor_pass.frag.glsl │ │ ├── compositor_pass.json │ │ └── compositor_pass.vert.glsl │ ├── copy_mrt2_pass │ │ ├── copy_mrt2_pass.frag.glsl │ │ └── copy_mrt2_pass.json │ ├── copy_mrt3_pass │ │ ├── copy_mrt3_pass.frag.glsl │ │ └── copy_mrt3_pass.json │ ├── copy_pass │ │ └── copy_pass.json │ ├── custom_mat_presets │ │ ├── custom_mat_deferred.frag.glsl │ │ ├── custom_mat_deferred.vert.glsl │ │ ├── custom_mat_forward.frag.glsl │ │ └── custom_mat_forward.vert.glsl │ ├── debug_draw │ │ ├── line.frag.glsl │ │ ├── line.vert.glsl │ │ └── line_deferred.frag.glsl │ ├── deferred_light │ │ ├── deferred_light.frag.glsl │ │ └── deferred_light.json │ ├── deferred_light_mobile │ │ ├── deferred_light.frag.glsl │ │ └── deferred_light_mobile.json │ ├── deferred_light_solid │ │ ├── deferred_light.frag.glsl │ │ └── deferred_light_solid.json │ ├── downsample_depth │ │ ├── downsample_depth.frag.glsl │ │ └── downsample_depth.json │ ├── fxaa_pass │ │ ├── fxaa_pass.frag.glsl │ │ └── fxaa_pass.json │ ├── histogram_pass │ │ ├── histogram_pass.frag.glsl │ │ └── histogram_pass.json │ ├── include │ │ ├── pass.vert.glsl │ │ ├── pass_copy.frag.glsl │ │ ├── pass_viewray.vert.glsl │ │ ├── pass_viewray2.vert.glsl │ │ └── pass_volume.vert.glsl │ ├── motion_blur_pass │ │ ├── motion_blur_pass.frag.glsl │ │ └── motion_blur_pass.json │ ├── motion_blur_veloc_pass │ │ ├── motion_blur_veloc_pass.frag.glsl │ │ └── motion_blur_veloc_pass.json │ ├── probe_cubemap │ │ ├── probe_cubemap.frag.glsl │ │ └── probe_cubemap.json │ ├── probe_planar │ │ ├── probe_planar.frag.glsl │ │ └── probe_planar.json │ ├── smaa_blend_weight │ │ ├── smaa_blend_weight.frag.glsl │ │ ├── smaa_blend_weight.json │ │ └── smaa_blend_weight.vert.glsl │ ├── smaa_edge_detect │ │ ├── smaa_edge_detect.frag.glsl │ │ ├── smaa_edge_detect.json │ │ └── smaa_edge_detect.vert.glsl │ ├── smaa_neighborhood_blend │ │ ├── smaa_neighborhood_blend.frag.glsl │ │ ├── smaa_neighborhood_blend.json │ │ └── smaa_neighborhood_blend.vert.glsl │ ├── ssao_pass │ │ ├── ssao_pass.frag.glsl │ │ ├── ssao_pass.json │ │ ├── ssgi_pass_.frag.glsl │ │ └── ssgi_pass_.json │ ├── ssgi_blur_pass │ │ ├── ssgi_blur_pass.frag.glsl │ │ └── ssgi_blur_pass.json │ ├── ssgi_pass │ │ ├── ssgi_pass.frag.glsl │ │ └── ssgi_pass.json │ ├── ssr_pass │ │ ├── ssr_pass.frag.glsl │ │ └── ssr_pass.json │ ├── ssrefr_pass │ │ ├── ssrefr_pass.frag.glsl │ │ └── ssrefr_pass.json │ ├── sss_pass │ │ ├── sss_pass.frag.glsl │ │ └── sss_pass.json │ ├── std │ │ ├── brdf.glsl │ │ ├── clusters.glsl │ │ ├── colorgrading.glsl │ │ ├── conetrace.glsl │ │ ├── denoise.glsl │ │ ├── dof.glsl │ │ ├── filters.glsl │ │ ├── gbuffer.glsl │ │ ├── ies.glsl │ │ ├── imageatomic.glsl │ │ ├── light.glsl │ │ ├── light_common.glsl │ │ ├── light_mobile.glsl │ │ ├── ltc.glsl │ │ ├── mapping.glsl │ │ ├── math.glsl │ │ ├── morph_target.glsl │ │ ├── normals.glsl │ │ ├── resample.glsl │ │ ├── shadows.glsl │ │ ├── shirr.glsl │ │ ├── skinning.glsl │ │ ├── sky.glsl │ │ ├── ssrs.glsl │ │ ├── sss.glsl │ │ ├── tonemap.glsl │ │ ├── voxels_constants.glsl │ │ └── vr.glsl │ ├── supersample_resolve │ │ ├── supersample_resolve.frag.glsl │ │ └── supersample_resolve.json │ ├── taa_pass │ │ ├── taa_pass.frag.glsl │ │ └── taa_pass.json │ ├── translucent_resolve │ │ ├── translucent_resolve.frag.glsl │ │ └── translucent_resolve.json │ ├── volumetric_light │ │ ├── volumetric_light.frag.glsl │ │ └── volumetric_light.json │ ├── voxel_light │ │ └── voxel_light.comp.glsl │ ├── voxel_offsetprev │ │ └── voxel_offsetprev.comp.glsl │ ├── voxel_resolve_ao │ │ └── voxel_resolve_ao.comp.glsl │ ├── voxel_resolve_diffuse │ │ └── voxel_resolve_diffuse.comp.glsl │ ├── voxel_resolve_refraction │ │ └── voxel_resolve_refraction.comp.glsl │ ├── voxel_resolve_shadows │ │ └── voxel_resolve_shadows.comp.glsl │ ├── voxel_resolve_specular │ │ └── voxel_resolve_specular.comp.glsl │ ├── voxel_sdf_jumpflood │ │ └── voxel_sdf_jumpflood.comp.glsl │ ├── voxel_temporal │ │ └── voxel_temporal.comp.glsl │ └── water_pass │ │ ├── water_pass.frag.glsl │ │ └── water_pass.json ├── Sources │ ├── armory │ │ ├── data │ │ │ ├── Config.hx │ │ │ └── ConstData.hx │ │ ├── import.hx │ │ ├── logicnode │ │ │ ├── ActiveCameraNode.hx │ │ │ ├── ActiveSceneNode.hx │ │ │ ├── AddGroupNode.hx │ │ │ ├── AddObjectToGroupNode.hx │ │ │ ├── AddParticleToObjectNode.hx │ │ │ ├── AddPhysicsConstraintNode.hx │ │ │ ├── AddRigidBodyNode.hx │ │ │ ├── AddTraitNode.hx │ │ │ ├── AlertNode.hx │ │ │ ├── AlternateNode.hx │ │ │ ├── AnimActionNode.hx │ │ │ ├── AnimationStateNode.hx │ │ │ ├── AppendTransformNode.hx │ │ │ ├── ApplyForceAtLocationNode.hx │ │ │ ├── ApplyForceNode.hx │ │ │ ├── ApplyImpulseAtLocationNode.hx │ │ │ ├── ApplyImpulseNode.hx │ │ │ ├── ApplyTorqueImpulseNode.hx │ │ │ ├── ApplyTorqueNode.hx │ │ │ ├── ArrayAddNode.hx │ │ │ ├── ArrayBooleanNode.hx │ │ │ ├── ArrayColorNode.hx │ │ │ ├── ArrayCompareNode.hx │ │ │ ├── ArrayConcatNode.hx │ │ │ ├── ArrayCountNode.hx │ │ │ ├── ArrayDisplayNode.hx │ │ │ ├── ArrayDistinctNode.hx │ │ │ ├── ArrayFilterNode.hx │ │ │ ├── ArrayFloatNode.hx │ │ │ ├── ArrayGetNextNode.hx │ │ │ ├── ArrayGetNode.hx │ │ │ ├── ArrayGetPreviousNextNode.hx │ │ │ ├── ArrayInArrayNode.hx │ │ │ ├── ArrayIndexListNode.hx │ │ │ ├── ArrayIndexNode.hx │ │ │ ├── ArrayInsertNode.hx │ │ │ ├── ArrayIntegerNode.hx │ │ │ ├── ArrayLengthNode.hx │ │ │ ├── ArrayLoopNode.hx │ │ │ ├── ArrayNode.hx │ │ │ ├── ArrayObjectNode.hx │ │ │ ├── ArrayPopNode.hx │ │ │ ├── ArrayRemoveNode.hx │ │ │ ├── ArrayRemoveValueNode.hx │ │ │ ├── ArrayResizeNode.hx │ │ │ ├── ArrayReverseNode.hx │ │ │ ├── ArraySampleNode.hx │ │ │ ├── ArraySetNode.hx │ │ │ ├── ArrayShiftNode.hx │ │ │ ├── ArrayShuffleNode.hx │ │ │ ├── ArraySliceNode.hx │ │ │ ├── ArraySortNode.hx │ │ │ ├── ArraySpliceNode.hx │ │ │ ├── ArrayStringNode.hx │ │ │ ├── ArrayVectorNode.hx │ │ │ ├── AutoExposureGetNode.hx │ │ │ ├── AutoExposureSetNode.hx │ │ │ ├── BitwiseMathNode.hx │ │ │ ├── BlendActionNode.hx │ │ │ ├── BloomGetNode.hx │ │ │ ├── BloomSetNode.hx │ │ │ ├── BoneFKNode.hx │ │ │ ├── BoneIKNode.hx │ │ │ ├── BooleanNode.hx │ │ │ ├── BranchNode.hx │ │ │ ├── CallFunctionNode.hx │ │ │ ├── CallGroupNode.hx │ │ │ ├── CallHaxeStaticNode.hx │ │ │ ├── CameraGetNode.hx │ │ │ ├── CameraSetNode.hx │ │ │ ├── CanvasGetCheckboxNode.hx │ │ │ ├── CanvasGetInputTextNode.hx │ │ │ ├── CanvasGetLocationNode.hx │ │ │ ├── CanvasGetPBNode.hx │ │ │ ├── CanvasGetPositionNode.hx │ │ │ ├── CanvasGetRotationNode.hx │ │ │ ├── CanvasGetScaleNode.hx │ │ │ ├── CanvasGetSliderNode.hx │ │ │ ├── CanvasGetTextNode.hx │ │ │ ├── CanvasGetVisibleNode.hx │ │ │ ├── CanvasSetAssetNode.hx │ │ │ ├── CanvasSetCheckBoxNode.hx │ │ │ ├── CanvasSetColorNode.hx │ │ │ ├── CanvasSetInputTextFocusNode.hx │ │ │ ├── CanvasSetInputTextNode.hx │ │ │ ├── CanvasSetLocationNode.hx │ │ │ ├── CanvasSetPBNode.hx │ │ │ ├── CanvasSetProgressBarColorNode.hx │ │ │ ├── CanvasSetRotationNode.hx │ │ │ ├── CanvasSetScaleNode.hx │ │ │ ├── CanvasSetSliderNode.hx │ │ │ ├── CanvasSetTextColorNode.hx │ │ │ ├── CanvasSetTextNode.hx │ │ │ ├── CanvasSetVisibleNode.hx │ │ │ ├── CaseIndexNode.hx │ │ │ ├── CaseStringNode.hx │ │ │ ├── CastPhysicsRayNode.hx │ │ │ ├── CastPhysicsRayOnNode.hx │ │ │ ├── ChromaticAberrationGetNode.hx │ │ │ ├── ChromaticAberrationSetNode.hx │ │ │ ├── ClampNode.hx │ │ │ ├── ClearConsoleNode.hx │ │ │ ├── ClearMapNode.hx │ │ │ ├── ClearParentNode.hx │ │ │ ├── ColorMixNode.hx │ │ │ ├── ColorNode.hx │ │ │ ├── ColorgradingGetGlobalNode.hx │ │ │ ├── ColorgradingGetHighlightNode.hx │ │ │ ├── ColorgradingGetMidtoneNode.hx │ │ │ ├── ColorgradingGetShadowNode.hx │ │ │ ├── ColorgradingSetGlobalNode.hx │ │ │ ├── ColorgradingSetHighlightNode.hx │ │ │ ├── ColorgradingSetMidtoneNode.hx │ │ │ ├── ColorgradingSetShadowNode.hx │ │ │ ├── ColorgradingShadowNode.hx │ │ │ ├── CombineColorHSVNode.hx │ │ │ ├── CombineColorNode.hx │ │ │ ├── CompareNode.hx │ │ │ ├── ConcatenateStringNode.hx │ │ │ ├── ConfirmNode.hx │ │ │ ├── ContainsStringNode.hx │ │ │ ├── CreateMapNode.hx │ │ │ ├── CreateRenderTargetNode.hx │ │ │ ├── CrowdGoToLocationNode.hx │ │ │ ├── CursorInRegionNode.hx │ │ │ ├── DefaultIfNullNode.hx │ │ │ ├── DegToRadNode.hx │ │ │ ├── DetectMobileBrowserNode.hx │ │ │ ├── DisplayInfoNode.hx │ │ │ ├── DistanceScreenToWorldSpaceNode.hx │ │ │ ├── DrawArcNode.hx │ │ │ ├── DrawCameraNode.hx │ │ │ ├── DrawCameraTextureNode.hx │ │ │ ├── DrawCircleNode.hx │ │ │ ├── DrawCurveNode.hx │ │ │ ├── DrawEllipseNode.hx │ │ │ ├── DrawImageNode.hx │ │ │ ├── DrawImageSequenceNode.hx │ │ │ ├── DrawLineNode.hx │ │ │ ├── DrawPolygonFromArrayNode.hx │ │ │ ├── DrawPolygonNode.hx │ │ │ ├── DrawRectNode.hx │ │ │ ├── DrawRoundedRectNode.hx │ │ │ ├── DrawStringNode.hx │ │ │ ├── DrawSubImageNode.hx │ │ │ ├── DrawTextAreaStringNode.hx │ │ │ ├── DrawToMaterialImageNode.hx │ │ │ ├── DrawTriangleNode.hx │ │ │ ├── DynamicNode.hx │ │ │ ├── ExpressionNode.hx │ │ │ ├── FloatDeltaInterpolateNode.hx │ │ │ ├── FloatNode.hx │ │ │ ├── FunctionNode.hx │ │ │ ├── FunctionOutputNode.hx │ │ │ ├── GamepadCoordsNode.hx │ │ │ ├── GamepadSticksNode.hx │ │ │ ├── GateNode.hx │ │ │ ├── GetAgentDataNode.hx │ │ │ ├── GetBoneFkIkOnlyNode.hx │ │ │ ├── GetBoneTransformNode.hx │ │ │ ├── GetCameraAspectNode.hx │ │ │ ├── GetCameraFovNode.hx │ │ │ ├── GetCameraScaleNode.hx │ │ │ ├── GetCameraStartEndNode.hx │ │ │ ├── GetCameraTypeNode.hx │ │ │ ├── GetChildNode.hx │ │ │ ├── GetChildrenNode.hx │ │ │ ├── GetContactsNode.hx │ │ │ ├── GetCursorLocationNode.hx │ │ │ ├── GetCursorStateNode.hx │ │ │ ├── GetDateTimeNode.hx │ │ │ ├── GetDebugConsoleSettings.hx │ │ │ ├── GetDimensionNode.hx │ │ │ ├── GetDistanceNode.hx │ │ │ ├── GetFPSNode.hx │ │ │ ├── GetFirstContactNode.hx │ │ │ ├── GetGamepadStartedNode.hx │ │ │ ├── GetGlobalCanvasFontSizeNode.hx │ │ │ ├── GetGlobalCanvasScaleNode.hx │ │ │ ├── GetGravityNode.hx │ │ │ ├── GetGroupNode.hx │ │ │ ├── GetHaxePropertyNode.hx │ │ │ ├── GetHosekWilkiePropertiesNode.hx │ │ │ ├── GetInputMapKeyNode.hx │ │ │ ├── GetKeyboardStartedNode.hx │ │ │ ├── GetLocationNode.hx │ │ │ ├── GetMapValueNode.hx │ │ │ ├── GetMaterialNode.hx │ │ │ ├── GetMaterialsNode.hx │ │ │ ├── GetMeshNode.hx │ │ │ ├── GetMouseLockNode.hx │ │ │ ├── GetMouseMovementNode.hx │ │ │ ├── GetMouseStartedNode.hx │ │ │ ├── GetMouseVisibleNode.hx │ │ │ ├── GetNameNode.hx │ │ │ ├── GetNishitaPropertiesNode.hx │ │ │ ├── GetObjectByUidNode.hx │ │ │ ├── GetObjectGeomNode.hx │ │ │ ├── GetObjectGroupNode.hx │ │ │ ├── GetObjectNode.hx │ │ │ ├── GetObjectOffscreenNode.hx │ │ │ ├── GetObjectTraitsNode.hx │ │ │ ├── GetParentNode.hx │ │ │ ├── GetParticleDataNode.hx │ │ │ ├── GetParticleNode.hx │ │ │ ├── GetPointVelocityNode.hx │ │ │ ├── GetPropertyNode.hx │ │ │ ├── GetRigidBodyDataNode.hx │ │ │ ├── GetRotationNode.hx │ │ │ ├── GetScaleNode.hx │ │ │ ├── GetSystemLanguage.hx │ │ │ ├── GetSystemName.hx │ │ │ ├── GetTilesheetStateNode.hx │ │ │ ├── GetTouchLocationNode.hx │ │ │ ├── GetTouchMovementNode.hx │ │ │ ├── GetTraitNameNode.hx │ │ │ ├── GetTraitNode.hx │ │ │ ├── GetTraitPausedNode.hx │ │ │ ├── GetTransformNode.hx │ │ │ ├── GetUidNode.hx │ │ │ ├── GetVelocityNode.hx │ │ │ ├── GetVisibleNode.hx │ │ │ ├── GetWorldNode.hx │ │ │ ├── GetWorldStrengthNode.hx │ │ │ ├── GlobalObjectNode.hx │ │ │ ├── GoToLocationNode.hx │ │ │ ├── GroupInputsNode.hx │ │ │ ├── GroupNode.hx │ │ │ ├── GroupOutputsNode.hx │ │ │ ├── HasContactArrayNode.hx │ │ │ ├── HasContactNode.hx │ │ │ ├── IntFromBooleanNode.hx │ │ │ ├── IntegerNode.hx │ │ │ ├── InverseNode.hx │ │ │ ├── IsFalseNode.hx │ │ │ ├── IsNoneNode.hx │ │ │ ├── IsNotNoneNode.hx │ │ │ ├── IsRigidBodyActiveNode.hx │ │ │ ├── IsTrueNode.hx │ │ │ ├── JsonStringifyNode.hx │ │ │ ├── KeyInterpolateNode.hx │ │ │ ├── LengthStringNode.hx │ │ │ ├── LenstextureGetNode.hx │ │ │ ├── LenstextureSetNode.hx │ │ │ ├── LetterboxGetNode.hx │ │ │ ├── LetterboxSetNode.hx │ │ │ ├── LoadUrlNode.hx │ │ │ ├── LogicNode.hx │ │ │ ├── LogicTree.hx │ │ │ ├── LookAtNode.hx │ │ │ ├── LoopBreakNode.hx │ │ │ ├── LoopContinueNode.hx │ │ │ ├── LoopNode.hx │ │ │ ├── MapKeyExistsNode.hx │ │ │ ├── MapLoopNode.hx │ │ │ ├── MapRangeNode.hx │ │ │ ├── MaskNode.hx │ │ │ ├── MaterialNode.hx │ │ │ ├── MathExpressionNode.hx │ │ │ ├── MathNode.hx │ │ │ ├── MathTermNode.hx │ │ │ ├── MatrixMathNode.hx │ │ │ ├── MergeNode.hx │ │ │ ├── MergedGamepadNode.hx │ │ │ ├── MergedKeyboardNode.hx │ │ │ ├── MergedMouseNode.hx │ │ │ ├── MergedSurfaceNode.hx │ │ │ ├── MergedVirtualButtonNode.hx │ │ │ ├── MeshNode.hx │ │ │ ├── MixNode.hx │ │ │ ├── MouseCoordsNode.hx │ │ │ ├── NavigableLocationNode.hx │ │ │ ├── NetworkClientNode.hx │ │ │ ├── NetworkCloseConnectionNode.hx │ │ │ ├── NetworkEventNode.hx │ │ │ ├── NetworkHostCloseClientNode.hx │ │ │ ├── NetworkHostGetIpNode.hx │ │ │ ├── NetworkHostNode.hx │ │ │ ├── NetworkHttpRequestNode.hx │ │ │ ├── NetworkMessageParserNode.hx │ │ │ ├── NetworkOpenConnectionNode.hx │ │ │ ├── NetworkSendMessageNode.hx │ │ │ ├── NoneNode.hx │ │ │ ├── NotNode.hx │ │ │ ├── NullNode.hx │ │ │ ├── ObjectNode.hx │ │ │ ├── OnActionMarkerNode.hx │ │ │ ├── OnApplicationStateNode.hx │ │ │ ├── OnCanvasElementNode.hx │ │ │ ├── OnContactArrayNode.hx │ │ │ ├── OnContactNode.hx │ │ │ ├── OnEventNode.hx │ │ │ ├── OnGamepadNode.hx │ │ │ ├── OnInitNode.hx │ │ │ ├── OnInputMapNode.hx │ │ │ ├── OnKeyboardNode.hx │ │ │ ├── OnMouseNode.hx │ │ │ ├── OnRemoveNode.hx │ │ │ ├── OnRender2DNode.hx │ │ │ ├── OnSurfaceNode.hx │ │ │ ├── OnSwipeNode.hx │ │ │ ├── OnTapScreen.hx │ │ │ ├── OnTimerNode.hx │ │ │ ├── OnUpdateNode.hx │ │ │ ├── OnVirtualButtonNode.hx │ │ │ ├── OnVolumeTriggerNode.hx │ │ │ ├── OncePerFrameNode.hx │ │ │ ├── ParseFloatNode.hx │ │ │ ├── ParseIntNode.hx │ │ │ ├── ParseJsonNode.hx │ │ │ ├── PauseActionNode.hx │ │ │ ├── PauseActiveCameraRenderNode.hx │ │ │ ├── PauseSoundNode.hx │ │ │ ├── PauseTilesheetNode.hx │ │ │ ├── PauseTraitNode.hx │ │ │ ├── PhysicsConstraintNode.hx │ │ │ ├── PhysicsConvexCastNode.hx │ │ │ ├── PhysicsConvexCastOnNode.hx │ │ │ ├── PickLocationNode.hx │ │ │ ├── PickObjectNode.hx │ │ │ ├── PlayActionFromNode.hx │ │ │ ├── PlayActionNode.hx │ │ │ ├── PlaySoundNode.hx │ │ │ ├── PlaySoundRawNode.hx │ │ │ ├── PlayTilesheetNode.hx │ │ │ ├── PrintNode.hx │ │ │ ├── ProbabilisticOutputNode.hx │ │ │ ├── PromptNode.hx │ │ │ ├── PulseNode.hx │ │ │ ├── QuaternionMathNode.hx │ │ │ ├── QuaternionNode.hx │ │ │ ├── RadToDegNode.hx │ │ │ ├── RandomBooleanNode.hx │ │ │ ├── RandomChoiceNode.hx │ │ │ ├── RandomColorNode.hx │ │ │ ├── RandomFloatNode.hx │ │ │ ├── RandomIntegerNode.hx │ │ │ ├── RandomOutputNode.hx │ │ │ ├── RandomStringNode.hx │ │ │ ├── RandomVectorNode.hx │ │ │ ├── RaycastClosestObjectNode.hx │ │ │ ├── RaycastObjectNode.hx │ │ │ ├── RaycastRayNode.hx │ │ │ ├── ReadFileNode.hx │ │ │ ├── ReadJsonNode.hx │ │ │ ├── ReadStorageNode.hx │ │ │ ├── RegularExpressionNode.hx │ │ │ ├── RemoveActiveSceneNode.hx │ │ │ ├── RemoveGroupNode.hx │ │ │ ├── RemoveInputMapKeyNode.hx │ │ │ ├── RemoveMapKeyNode.hx │ │ │ ├── RemoveObjectFromGroupNode.hx │ │ │ ├── RemoveObjectNode.hx │ │ │ ├── RemoveParentBoneNode.hx │ │ │ ├── RemoveParticleFromObjectNode.hx │ │ │ ├── RemovePhysicsNode.hx │ │ │ ├── RemoveTraitNode.hx │ │ │ ├── RemoveTraitObjectNode.hx │ │ │ ├── ResumeActionNode.hx │ │ │ ├── ResumeTilesheetNode.hx │ │ │ ├── ResumeTraitNode.hx │ │ │ ├── RetainValueNode.hx │ │ │ ├── RotateObjectAroundAxisNode.hx │ │ │ ├── RotateObjectNode.hx │ │ │ ├── RotateRenderTargetNode.hx │ │ │ ├── RotationFromTransformNode.hx │ │ │ ├── RotationMathNode.hx │ │ │ ├── RotationNode.hx │ │ │ ├── RpConfigNode.hx │ │ │ ├── RpMSAANode.hx │ │ │ ├── RpShadowQualityNode.hx │ │ │ ├── RpSuperSampleNode.hx │ │ │ ├── SSAOGetNode.hx │ │ │ ├── SSAOSetNode.hx │ │ │ ├── SSRGetNode.hx │ │ │ ├── SSRSetNode.hx │ │ │ ├── ScaleObjectNode.hx │ │ │ ├── SceneNode.hx │ │ │ ├── SceneRootNode.hx │ │ │ ├── ScreenToWorldSpaceNode.hx │ │ │ ├── ScriptNode.hx │ │ │ ├── SelectNode.hx │ │ │ ├── SelectOutputNode.hx │ │ │ ├── SelfNode.hx │ │ │ ├── SelfTraitNode.hx │ │ │ ├── SendEventNode.hx │ │ │ ├── SendGlobalEventNode.hx │ │ │ ├── SensorCoordsNode.hx │ │ │ ├── SeparateColorHSVNode.hx │ │ │ ├── SeparateColorNode.hx │ │ │ ├── SeparateQuaternionNode.hx │ │ │ ├── SeparateRotationNode.hx │ │ │ ├── SeparateTransformNode.hx │ │ │ ├── SeparateVectorNode.hx │ │ │ ├── SequenceNode.hx │ │ │ ├── SetActionPausedNode.hx │ │ │ ├── SetActionSpeedNode.hx │ │ │ ├── SetActivationStateNode.hx │ │ │ ├── SetActiveTilesheetNode.hx │ │ │ ├── SetAreaLightSizeNode.hx │ │ │ ├── SetBoneFkIkOnlyNode.hx │ │ │ ├── SetCameraAspectNode.hx │ │ │ ├── SetCameraFovNode.hx │ │ │ ├── SetCameraNode.hx │ │ │ ├── SetCameraScaleNode.hx │ │ │ ├── SetCameraStartEndNode.hx │ │ │ ├── SetCameraTypeNode.hx │ │ │ ├── SetCursorStateNode.hx │ │ │ ├── SetDebugConsoleSettings.hx │ │ │ ├── SetFrictionNode.hx │ │ │ ├── SetGlobalCanvasFontSizeNode.hx │ │ │ ├── SetGlobalCanvasScaleNode.hx │ │ │ ├── SetGlobalCanvasVisibilityNode.hx │ │ │ ├── SetGravityEnabledNode.hx │ │ │ ├── SetGravityNode.hx │ │ │ ├── SetHaxePropertyNode.hx │ │ │ ├── SetHosekWilkiePropertiesNode.hx │ │ │ ├── SetInputMapKeyNode.hx │ │ │ ├── SetLightColorNode.hx │ │ │ ├── SetLightStrengthNode.hx │ │ │ ├── SetLocationNode.hx │ │ │ ├── SetMapFromArrayNode.hx │ │ │ ├── SetMapValueNode.hx │ │ │ ├── SetMaterialImageParamNode.hx │ │ │ ├── SetMaterialNode.hx │ │ │ ├── SetMaterialRgbParamNode.hx │ │ │ ├── SetMaterialSlotNode.hx │ │ │ ├── SetMaterialValueParamNode.hx │ │ │ ├── SetMeshNode.hx │ │ │ ├── SetMouseLockNode.hx │ │ │ ├── SetNameNode.hx │ │ │ ├── SetNishitaPropertiesNode.hx │ │ │ ├── SetObjectShapeKeyNode.hx │ │ │ ├── SetParentBoneNode.hx │ │ │ ├── SetParentNode.hx │ │ │ ├── SetParticleDataNode.hx │ │ │ ├── SetParticleRenderEmitterNode.hx │ │ │ ├── SetParticleSpeedNode.hx │ │ │ ├── SetPropertyNode.hx │ │ │ ├── SetRotationNode.hx │ │ │ ├── SetScaleNode.hx │ │ │ ├── SetSceneNode.hx │ │ │ ├── SetShaderUniformNode.hx │ │ │ ├── SetSoundNode.hx │ │ │ ├── SetSpotLightBlendNode.hx │ │ │ ├── SetSpotLightSizeNode.hx │ │ │ ├── SetTilesheetFrameNode.hx │ │ │ ├── SetTilesheetPausedNode.hx │ │ │ ├── SetTimeScaleNode.hx │ │ │ ├── SetTraitPausedNode.hx │ │ │ ├── SetTransformNode.hx │ │ │ ├── SetVariableNode.hx │ │ │ ├── SetVelocityNode.hx │ │ │ ├── SetVibrateNode.hx │ │ │ ├── SetVisibleNode.hx │ │ │ ├── SetVolumeSoundNode.hx │ │ │ ├── SetWorldStrengthNode.hx │ │ │ ├── SharpenGetNode.hx │ │ │ ├── SharpenSetNode.hx │ │ │ ├── ShowMouseNode.hx │ │ │ ├── ShutdownNode.hx │ │ │ ├── SleepNode.hx │ │ │ ├── SpawnCollectionNode.hx │ │ │ ├── SpawnObjectByNameNode.hx │ │ │ ├── SpawnObjectNode.hx │ │ │ ├── SpawnSceneNode.hx │ │ │ ├── SplitStringNode.hx │ │ │ ├── StopAgentNode.hx │ │ │ ├── StopSoundNode.hx │ │ │ ├── StringCharAtNode.hx │ │ │ ├── StringMapNode.hx │ │ │ ├── StringNode.hx │ │ │ ├── StringReplaceNode.hx │ │ │ ├── SubStringNode.hx │ │ │ ├── SurfaceCoordsNode.hx │ │ │ ├── SwitchNode.hx │ │ │ ├── TimeNode.hx │ │ │ ├── TimerNode.hx │ │ │ ├── ToBoolNode.hx │ │ │ ├── TouchInRegionNode.hx │ │ │ ├── TraitNode.hx │ │ │ ├── TransformMathNode.hx │ │ │ ├── TransformNode.hx │ │ │ ├── TranslateObjectNode.hx │ │ │ ├── TranslateOnLocalAxisNode.hx │ │ │ ├── TweenFloatNode.hx │ │ │ ├── TweenRotationNode.hx │ │ │ ├── TweenTransformNode.hx │ │ │ ├── TweenVectorNode.hx │ │ │ ├── ValueChangedNode.hx │ │ │ ├── VectorClampToSizeNode.hx │ │ │ ├── VectorFromBooleanNode.hx │ │ │ ├── VectorFromTransformNode.hx │ │ │ ├── VectorMathNode.hx │ │ │ ├── VectorMixNode.hx │ │ │ ├── VectorMoveTowardsNode.hx │ │ │ ├── VectorNode.hx │ │ │ ├── VectorToObjectOrientationNode.hx │ │ │ ├── VolumeTriggerNode.hx │ │ │ ├── VolumetricFogGetNode.hx │ │ │ ├── VolumetricFogSetNode.hx │ │ │ ├── VolumetricLightGetNode.hx │ │ │ ├── VolumetricLightSetNode.hx │ │ │ ├── WaitForNode.hx │ │ │ ├── WhileNode.hx │ │ │ ├── WindowInfoNode.hx │ │ │ ├── WorldToScreenSpaceNode.hx │ │ │ ├── WorldVectorToLocalSpaceNode.hx │ │ │ ├── WriteFileNode.hx │ │ │ ├── WriteImageNode.hx │ │ │ ├── WriteJsonNode.hx │ │ │ └── WriteStorageNode.hx │ │ ├── math │ │ │ ├── Helper.hx │ │ │ └── Rotator.hx │ │ ├── network │ │ │ ├── Buffer.hx │ │ │ ├── Connect.hx │ │ │ ├── Handler.hx │ │ │ ├── HttpHeader.hx │ │ │ ├── HttpRequest.hx │ │ │ ├── HttpResponse.hx │ │ │ ├── LICENSE.md │ │ │ ├── Log.hx │ │ │ ├── OpCode.hx │ │ │ ├── SecureSocketImpl.hx │ │ │ ├── SocketImpl.hx │ │ │ ├── State.hx │ │ │ ├── Types.hx │ │ │ ├── Utf8Encoder.hx │ │ │ ├── Util.hx │ │ │ ├── WebSocket.hx │ │ │ ├── WebSocketCommon.hx │ │ │ ├── WebSocketHandler.hx │ │ │ ├── WebSocketSecureServer.hx │ │ │ ├── WebSocketServer.hx │ │ │ ├── nodejs │ │ │ │ ├── NodeSocket.hx │ │ │ │ ├── NodeSocketInput.hx │ │ │ │ └── NodeSocketOutput.hx │ │ │ └── uuid │ │ │ │ └── Uuid.hx │ │ ├── object │ │ │ ├── TransformExtension.hx │ │ │ └── Uniforms.hx │ │ ├── renderpath │ │ │ ├── Downsampler.hx │ │ │ ├── DynamicResolutionScale.hx │ │ │ ├── HosekWilkie.hx │ │ │ ├── HosekWilkieData.hx │ │ │ ├── Inc.hx │ │ │ ├── Nishita.hx │ │ │ ├── Postprocess.hx │ │ │ ├── RenderPathCreator.hx │ │ │ ├── RenderPathDeferred.hx │ │ │ ├── RenderPathForward.hx │ │ │ ├── RenderPathRaytracer.hx │ │ │ ├── RenderToTexture.hx │ │ │ └── Upsampler.hx │ │ ├── system │ │ │ ├── Assert.hx │ │ │ ├── Event.hx │ │ │ ├── FSM.hx │ │ │ ├── InputMap.hx │ │ │ ├── Logic.hx │ │ │ ├── Signal.hx │ │ │ └── Starter.hx │ │ ├── trait │ │ │ ├── ArcBall.hx │ │ │ ├── Character.hx │ │ │ ├── CustomParticle.hx │ │ │ ├── FirstPersonController.hx │ │ │ ├── FollowCamera.hx │ │ │ ├── NavAgent.hx │ │ │ ├── NavCrowd.hx │ │ │ ├── NavMesh.hx │ │ │ ├── NavObstacle.hx │ │ │ ├── PhysicsBreak.hx │ │ │ ├── PhysicsDrag.hx │ │ │ ├── SimpleMoveObject.hx │ │ │ ├── SimpleRotateObject.hx │ │ │ ├── SimpleScaleObject.hx │ │ │ ├── ThirdPersonController.hx │ │ │ ├── VehicleBody.hx │ │ │ ├── VirtualGamepad.hx │ │ │ ├── WalkNavigation.hx │ │ │ ├── internal │ │ │ │ ├── Bridge.hx │ │ │ │ ├── CameraController.hx │ │ │ │ ├── CanvasScript.hx │ │ │ │ ├── DebugConsole.hx │ │ │ │ ├── DebugDraw.hx │ │ │ │ ├── LivePatch.hx │ │ │ │ ├── LoadingScreen.hx │ │ │ │ ├── MovieTexture.hx │ │ │ │ ├── TerrainPhysics.hx │ │ │ │ ├── UniformsManager.hx │ │ │ │ ├── WasmScript.hx │ │ │ │ └── wasm_api.h │ │ │ ├── navigation │ │ │ │ ├── DebugDrawHelper.hx │ │ │ │ └── Navigation.hx │ │ │ └── physics │ │ │ │ ├── KinematicCharacterController.hx │ │ │ │ ├── PhysicsConstraint.hx │ │ │ │ ├── PhysicsHook.hx │ │ │ │ ├── PhysicsWorld.hx │ │ │ │ ├── RigidBody.hx │ │ │ │ ├── SoftBody.hx │ │ │ │ └── bullet │ │ │ │ ├── DebugDrawHelper.hx │ │ │ │ ├── KinematicCharacterController.hx │ │ │ │ ├── PhysicsConstraint.hx │ │ │ │ ├── PhysicsConstraintExportHelper.hx │ │ │ │ ├── PhysicsHook.hx │ │ │ │ ├── PhysicsWorld.hx │ │ │ │ ├── RigidBody.hx │ │ │ │ └── SoftBody.hx │ │ └── ui │ │ │ ├── Canvas.hx │ │ │ ├── Ext.hx │ │ │ ├── Popup.hx │ │ │ └── Themes.hx │ ├── iron │ │ ├── App.hx │ │ ├── RenderPath.hx │ │ ├── Scene.hx │ │ ├── Trait.hx │ │ ├── data │ │ │ ├── Armature.hx │ │ │ ├── CameraData.hx │ │ │ ├── ConstData.hx │ │ │ ├── Data.hx │ │ │ ├── Geometry.hx │ │ │ ├── LightData.hx │ │ │ ├── MaterialData.hx │ │ │ ├── MeshBatch.hx │ │ │ ├── MeshData.hx │ │ │ ├── ParticleData.hx │ │ │ ├── ProbeData.hx │ │ │ ├── SceneFormat.hx │ │ │ ├── SceneStream.hx │ │ │ ├── ShaderData.hx │ │ │ ├── TerrainStream.hx │ │ │ ├── Wasm.hx │ │ │ └── WorldData.hx │ │ ├── format │ │ │ └── bmp │ │ │ │ ├── Data.hx │ │ │ │ ├── Reader.hx │ │ │ │ ├── Tools.hx │ │ │ │ └── Writer.hx │ │ ├── math │ │ │ ├── Mat3.hx │ │ │ ├── Mat4.hx │ │ │ ├── Quat.hx │ │ │ ├── Ray.hx │ │ │ ├── RayCaster.hx │ │ │ ├── Vec2.hx │ │ │ ├── Vec3.hx │ │ │ └── Vec4.hx │ │ ├── object │ │ │ ├── Animation.hx │ │ │ ├── BoneAnimation.hx │ │ │ ├── CameraObject.hx │ │ │ ├── Clipmap.hx │ │ │ ├── Constraint.hx │ │ │ ├── DecalObject.hx │ │ │ ├── LightObject.hx │ │ │ ├── MeshObject.hx │ │ │ ├── MorphTarget.hx │ │ │ ├── Object.hx │ │ │ ├── ObjectAnimation.hx │ │ │ ├── ParticleSystem.hx │ │ │ ├── ProbeObject.hx │ │ │ ├── SpeakerObject.hx │ │ │ ├── Tilesheet.hx │ │ │ ├── Transform.hx │ │ │ └── Uniforms.hx │ │ └── system │ │ │ ├── ArmPack.hx │ │ │ ├── Audio.hx │ │ │ ├── Input.hx │ │ │ ├── Lz4.hx │ │ │ ├── Storage.hx │ │ │ ├── Time.hx │ │ │ └── Tween.hx │ └── zui │ │ ├── Ext.hx │ │ ├── GraphicsExtension.hx │ │ ├── Id.hx │ │ ├── Nodes.hx │ │ ├── Themes.hx │ │ └── Zui.hx └── blender │ ├── __init__.py │ ├── arm │ ├── LICENSE.md │ ├── __init__.py │ ├── api.py │ ├── assets.py │ ├── custom_icons │ │ ├── bundle.png │ │ ├── haxe.png │ │ └── wasm.png │ ├── exporter.py │ ├── exporter_opt.py │ ├── handlers.py │ ├── keymap.py │ ├── lib │ │ ├── __init__.py │ │ ├── armpack.py │ │ ├── lz4.py │ │ ├── make_datas.py │ │ └── server.py │ ├── lightmapper │ │ ├── __init__.py │ │ ├── assets │ │ │ ├── TLM_Overlay.png │ │ │ ├── dash.ogg │ │ │ ├── gentle.ogg │ │ │ ├── noot.ogg │ │ │ ├── pingping.ogg │ │ │ ├── sound.ogg │ │ │ └── tlm_data.blend │ │ ├── icons │ │ │ ├── bake.png │ │ │ ├── clean.png │ │ │ └── explore.png │ │ ├── keymap │ │ │ ├── __init__.py │ │ │ └── keymap.py │ │ ├── network │ │ │ ├── client.py │ │ │ └── server.py │ │ ├── operators │ │ │ ├── __init__.py │ │ │ ├── imagetools.py │ │ │ ├── installopencv.py │ │ │ └── tlm.py │ │ ├── panels │ │ │ ├── __init__.py │ │ │ ├── image.py │ │ │ ├── light.py │ │ │ ├── object.py │ │ │ ├── scene.py │ │ │ └── world.py │ │ ├── preferences │ │ │ ├── __init__.py │ │ │ └── addon_preferences.py │ │ ├── properties │ │ │ ├── __init__.py │ │ │ ├── atlas.py │ │ │ ├── denoiser │ │ │ │ ├── integrated.py │ │ │ │ ├── oidn.py │ │ │ │ └── optix.py │ │ │ ├── filtering.py │ │ │ ├── image.py │ │ │ ├── object.py │ │ │ ├── renderer │ │ │ │ ├── cycles.py │ │ │ │ ├── luxcorerender.py │ │ │ │ ├── octanerender.py │ │ │ │ └── radeonrays.py │ │ │ └── scene.py │ │ └── utility │ │ │ ├── __init__.py │ │ │ ├── build.py │ │ │ ├── cycles │ │ │ ├── ao.py │ │ │ ├── cache.py │ │ │ ├── indirect.py │ │ │ ├── lightmap.py │ │ │ ├── nodes.py │ │ │ └── prepare.py │ │ │ ├── denoiser │ │ │ ├── integrated.py │ │ │ ├── oidn.py │ │ │ └── optix.py │ │ │ ├── encoding.py │ │ │ ├── filtering │ │ │ ├── numpy.py │ │ │ ├── opencv.py │ │ │ └── shader.py │ │ │ ├── gui │ │ │ └── Viewport.py │ │ │ ├── icon.py │ │ │ ├── log.py │ │ │ ├── luxcore │ │ │ └── setup.py │ │ │ ├── octane │ │ │ ├── configure.py │ │ │ └── lightmap2.py │ │ │ ├── pack.py │ │ │ ├── preconfiguration │ │ │ └── object.py │ │ │ ├── rectpack │ │ │ ├── __init__.py │ │ │ ├── enclose.py │ │ │ ├── geometry.py │ │ │ ├── guillotine.py │ │ │ ├── maxrects.py │ │ │ ├── pack_algo.py │ │ │ ├── packer.py │ │ │ ├── skyline.py │ │ │ └── waste.py │ │ │ └── utility.py │ ├── live_patch.py │ ├── log.py │ ├── logicnode │ │ ├── __init__.py │ │ ├── animation │ │ │ ├── LN_action.py │ │ │ ├── LN_blend_action.py │ │ │ ├── LN_bone_fk.py │ │ │ ├── LN_bone_ik.py │ │ │ ├── LN_get_action_state.py │ │ │ ├── LN_get_bone_fk_ik_only.py │ │ │ ├── LN_get_bone_transform.py │ │ │ ├── LN_get_tilesheet_state.py │ │ │ ├── LN_on_action_marker.py │ │ │ ├── LN_play_action_from.py │ │ │ ├── LN_play_tilesheet.py │ │ │ ├── LN_remove_parent_bone.py │ │ │ ├── LN_set_action_paused.py │ │ │ ├── LN_set_action_speed.py │ │ │ ├── LN_set_active_tilesheet.py │ │ │ ├── LN_set_bone_fk_ik_only.py │ │ │ ├── LN_set_parent_bone.py │ │ │ ├── LN_set_tilesheet_frame.py │ │ │ ├── LN_set_tilesheet_paused.py │ │ │ └── __init__.py │ │ ├── arm_node_group.py │ │ ├── arm_nodes.py │ │ ├── arm_props.py │ │ ├── arm_sockets.py │ │ ├── array │ │ │ ├── LN_array.py │ │ │ ├── LN_array_add.py │ │ │ ├── LN_array_boolean.py │ │ │ ├── LN_array_color.py │ │ │ ├── LN_array_compare.py │ │ │ ├── LN_array_concat.py │ │ │ ├── LN_array_contains.py │ │ │ ├── LN_array_count.py │ │ │ ├── LN_array_display.py │ │ │ ├── LN_array_distinct.py │ │ │ ├── LN_array_filter.py │ │ │ ├── LN_array_float.py │ │ │ ├── LN_array_get.py │ │ │ ├── LN_array_get_PreviousNext.py │ │ │ ├── LN_array_get_next.py │ │ │ ├── LN_array_index.py │ │ │ ├── LN_array_index_list.py │ │ │ ├── LN_array_insert.py │ │ │ ├── LN_array_integer.py │ │ │ ├── LN_array_length.py │ │ │ ├── LN_array_loop_node.py │ │ │ ├── LN_array_object.py │ │ │ ├── LN_array_pop.py │ │ │ ├── LN_array_remove_by_index.py │ │ │ ├── LN_array_remove_by_value.py │ │ │ ├── LN_array_resize.py │ │ │ ├── LN_array_reverse.py │ │ │ ├── LN_array_sample.py │ │ │ ├── LN_array_set.py │ │ │ ├── LN_array_shift.py │ │ │ ├── LN_array_shuffle.py │ │ │ ├── LN_array_slice.py │ │ │ ├── LN_array_sort.py │ │ │ ├── LN_array_splice.py │ │ │ ├── LN_array_string.py │ │ │ ├── LN_array_vector.py │ │ │ └── __init__.py │ │ ├── browser │ │ │ ├── LN_alert.py │ │ │ ├── LN_confirm.py │ │ │ ├── LN_detect_mobile_browser.py │ │ │ ├── LN_loadUrl.py │ │ │ ├── LN_prompt.py │ │ │ └── __init__.py │ │ ├── camera │ │ │ ├── LN_get_camera_active.py │ │ │ ├── LN_get_camera_aspect.py │ │ │ ├── LN_get_camera_fov.py │ │ │ ├── LN_get_camera_scale.py │ │ │ ├── LN_get_camera_start_end.py │ │ │ ├── LN_get_camera_type.py │ │ │ ├── LN_set_camera_active.py │ │ │ ├── LN_set_camera_aspect.py │ │ │ ├── LN_set_camera_fov.py │ │ │ ├── LN_set_camera_scale.py │ │ │ ├── LN_set_camera_start_end.py │ │ │ ├── LN_set_camera_type.py │ │ │ └── __init__.py │ │ ├── canvas │ │ │ ├── LN_get_canvas_checkbox.py │ │ │ ├── LN_get_canvas_input_text.py │ │ │ ├── LN_get_canvas_location.py │ │ │ ├── LN_get_canvas_position.py │ │ │ ├── LN_get_canvas_progress_bar.py │ │ │ ├── LN_get_canvas_rotation.py │ │ │ ├── LN_get_canvas_scale.py │ │ │ ├── LN_get_canvas_slider.py │ │ │ ├── LN_get_canvas_text.py │ │ │ ├── LN_get_canvas_visible.py │ │ │ ├── LN_get_global_canvas_font_size.py │ │ │ ├── LN_get_global_canvas_scale.py │ │ │ ├── LN_on_canvas_element.py │ │ │ ├── LN_set_canvas_asset.py │ │ │ ├── LN_set_canvas_checkbox.py │ │ │ ├── LN_set_canvas_color.py │ │ │ ├── LN_set_canvas_input_text.py │ │ │ ├── LN_set_canvas_input_text_focus.py │ │ │ ├── LN_set_canvas_location.py │ │ │ ├── LN_set_canvas_progress_bar.py │ │ │ ├── LN_set_canvas_rotation.py │ │ │ ├── LN_set_canvas_scale.py │ │ │ ├── LN_set_canvas_slider.py │ │ │ ├── LN_set_canvas_text.py │ │ │ ├── LN_set_canvas_visible.py │ │ │ ├── LN_set_global_canvas_font_size.py │ │ │ ├── LN_set_global_canvas_scale.py │ │ │ ├── LN_set_global_canvas_visibility.py │ │ │ └── __init__.py │ │ ├── deprecated │ │ │ ├── LN_get_mouse_lock.py │ │ │ ├── LN_get_mouse_visible.py │ │ │ ├── LN_group_nodes.py │ │ │ ├── LN_mouse_coords.py │ │ │ ├── LN_on_gamepad.py │ │ │ ├── LN_on_keyboard.py │ │ │ ├── LN_on_mouse.py │ │ │ ├── LN_on_surface.py │ │ │ ├── LN_on_virtual_button.py │ │ │ ├── LN_pause_action.py │ │ │ ├── LN_pause_tilesheet.py │ │ │ ├── LN_pause_trait.py │ │ │ ├── LN_play_action.py │ │ │ ├── LN_quaternion.py │ │ │ ├── LN_resume_action.py │ │ │ ├── LN_resume_tilesheet.py │ │ │ ├── LN_resume_trait.py │ │ │ ├── LN_rotate_object_around_axis.py │ │ │ ├── LN_scale_object.py │ │ │ ├── LN_separate_quaternion.py │ │ │ ├── LN_set_canvas_progress_bar_color.py │ │ │ ├── LN_set_canvas_text_color.py │ │ │ ├── LN_set_mouse_lock.py │ │ │ ├── LN_set_mouse_visible.py │ │ │ ├── LN_set_object_material.py │ │ │ ├── LN_surface_coords.py │ │ │ └── __init__.py │ │ ├── draw │ │ │ ├── LN_draw_Text_Area_string.py │ │ │ ├── LN_draw_arc.py │ │ │ ├── LN_draw_camera.py │ │ │ ├── LN_draw_camera_texture.py │ │ │ ├── LN_draw_circle.py │ │ │ ├── LN_draw_curve.py │ │ │ ├── LN_draw_ellipse.py │ │ │ ├── LN_draw_image.py │ │ │ ├── LN_draw_image_sequence.py │ │ │ ├── LN_draw_line.py │ │ │ ├── LN_draw_polygon.py │ │ │ ├── LN_draw_polygon_from_array.py │ │ │ ├── LN_draw_rect.py │ │ │ ├── LN_draw_rounded_rect.py │ │ │ ├── LN_draw_string.py │ │ │ ├── LN_draw_sub_image.py │ │ │ ├── LN_draw_to_material_image.py │ │ │ ├── LN_draw_triangle.py │ │ │ └── __init__.py │ │ ├── event │ │ │ ├── LN_on_application_state.py │ │ │ ├── LN_on_event.py │ │ │ ├── LN_on_init.py │ │ │ ├── LN_on_remove.py │ │ │ ├── LN_on_render2d.py │ │ │ ├── LN_on_timer.py │ │ │ ├── LN_on_update.py │ │ │ ├── LN_send_event_to_object.py │ │ │ ├── LN_send_global_event.py │ │ │ └── __init__.py │ │ ├── input │ │ │ ├── LN_cursor_in_region.py │ │ │ ├── LN_gamepad.py │ │ │ ├── LN_gamepad_coords.py │ │ │ ├── LN_gamepad_sticks.py │ │ │ ├── LN_get_cursor_location.py │ │ │ ├── LN_get_cursor_state.py │ │ │ ├── LN_get_gamepad_started.py │ │ │ ├── LN_get_input_map_key.py │ │ │ ├── LN_get_keyboard_started.py │ │ │ ├── LN_get_mouse_movement.py │ │ │ ├── LN_get_mouse_started.py │ │ │ ├── LN_get_touch_location.py │ │ │ ├── LN_get_touch_movement.py │ │ │ ├── LN_keyboard.py │ │ │ ├── LN_mouse.py │ │ │ ├── LN_on_input_map.py │ │ │ ├── LN_on_swipe.py │ │ │ ├── LN_on_tap_screen.py │ │ │ ├── LN_remove_input_map_key.py │ │ │ ├── LN_sensor_coords.py │ │ │ ├── LN_set_cursor_state.py │ │ │ ├── LN_set_input_map_key.py │ │ │ ├── LN_touch.py │ │ │ ├── LN_touch_in_region.py │ │ │ ├── LN_virtual_button.py │ │ │ └── __init__.py │ │ ├── light │ │ │ ├── LN_set_area_light_size.py │ │ │ ├── LN_set_light_color.py │ │ │ ├── LN_set_light_strength.py │ │ │ ├── LN_set_spot_light_blend.py │ │ │ ├── LN_set_spot_light_size.py │ │ │ └── __init__.py │ │ ├── logic │ │ │ ├── LN_alternate_output.py │ │ │ ├── LN_branch.py │ │ │ ├── LN_call_function.py │ │ │ ├── LN_case_index.py │ │ │ ├── LN_function.py │ │ │ ├── LN_function_output.py │ │ │ ├── LN_gate.py │ │ │ ├── LN_invert_boolean.py │ │ │ ├── LN_invert_output.py │ │ │ ├── LN_is_false.py │ │ │ ├── LN_is_not_null.py │ │ │ ├── LN_is_null.py │ │ │ ├── LN_is_true.py │ │ │ ├── LN_loop.py │ │ │ ├── LN_loop_break.py │ │ │ ├── LN_loop_continue.py │ │ │ ├── LN_merge.py │ │ │ ├── LN_null.py │ │ │ ├── LN_once_per_frame.py │ │ │ ├── LN_output_sequence.py │ │ │ ├── LN_output_to_boolean.py │ │ │ ├── LN_pulse.py │ │ │ ├── LN_select.py │ │ │ ├── LN_select_output.py │ │ │ ├── LN_switch_output.py │ │ │ ├── LN_value_changed.py │ │ │ ├── LN_wait_for.py │ │ │ ├── LN_while_true.py │ │ │ └── __init__.py │ │ ├── map │ │ │ ├── LN_clear_map.py │ │ │ ├── LN_create_map.py │ │ │ ├── LN_get_map_value.py │ │ │ ├── LN_json_parse.py │ │ │ ├── LN_json_stringify.py │ │ │ ├── LN_map_key_exists.py │ │ │ ├── LN_map_loop.py │ │ │ ├── LN_remove_map_key.py │ │ │ ├── LN_set_map_from_array.py │ │ │ ├── LN_set_map_value.py │ │ │ ├── LN_string_map.py │ │ │ └── __init__.py │ │ ├── material │ │ │ ├── LN_get_object_material.py │ │ │ ├── LN_get_object_materials.py │ │ │ ├── LN_material.py │ │ │ ├── LN_set_material_image_param.py │ │ │ ├── LN_set_material_rgb_param.py │ │ │ ├── LN_set_material_value_param.py │ │ │ ├── LN_set_object_material_slot.py │ │ │ └── __init__.py │ │ ├── math │ │ │ ├── LN_bitwise_math.py │ │ │ ├── LN_clamp.py │ │ │ ├── LN_color_mix.py │ │ │ ├── LN_combine_hsv.py │ │ │ ├── LN_combine_rgb.py │ │ │ ├── LN_compare.py │ │ │ ├── LN_deg_to_rad.py │ │ │ ├── LN_distance_screen_to_world_space.py │ │ │ ├── LN_float_delta_interpolate.py │ │ │ ├── LN_key_interpolate.py │ │ │ ├── LN_map_range.py │ │ │ ├── LN_math.py │ │ │ ├── LN_math_expression.py │ │ │ ├── LN_math_term.py │ │ │ ├── LN_matrix_math.py │ │ │ ├── LN_mix.py │ │ │ ├── LN_mix_vector.py │ │ │ ├── LN_quaternion_math.py │ │ │ ├── LN_rad_to_deg.py │ │ │ ├── LN_rotation_math.py │ │ │ ├── LN_screen_to_world_space.py │ │ │ ├── LN_separate_hsv.py │ │ │ ├── LN_separate_rgb.py │ │ │ ├── LN_separate_xyz.py │ │ │ ├── LN_tween_float.py │ │ │ ├── LN_tween_rotation.py │ │ │ ├── LN_tween_transform.py │ │ │ ├── LN_tween_vector.py │ │ │ ├── LN_vector_clamp.py │ │ │ ├── LN_vector_math.py │ │ │ ├── LN_vector_move_towards.py │ │ │ ├── LN_world_to_screen_space.py │ │ │ └── __init__.py │ │ ├── miscellaneous │ │ │ ├── LN_boolean_to_int.py │ │ │ ├── LN_boolean_to_vector.py │ │ │ ├── LN_call_group.py │ │ │ ├── LN_default_if_null.py │ │ │ ├── LN_get_application_time.py │ │ │ ├── LN_get_debug_console_settings.py │ │ │ ├── LN_get_display_resolution.py │ │ │ ├── LN_get_fps.py │ │ │ ├── LN_get_window_resolution.py │ │ │ ├── LN_group_input.py │ │ │ ├── LN_group_output.py │ │ │ ├── LN_regular_expression.py │ │ │ ├── LN_set_debug_console_settings.py │ │ │ ├── LN_set_time_scale.py │ │ │ ├── LN_sleep.py │ │ │ ├── LN_timer.py │ │ │ └── __init__.py │ │ ├── native │ │ │ ├── LN_call_haxe_static.py │ │ │ ├── LN_clear_console.py │ │ │ ├── LN_expression.py │ │ │ ├── LN_get_date_time.py │ │ │ ├── LN_get_haxe_property.py │ │ │ ├── LN_get_system_language.py │ │ │ ├── LN_get_system_name.py │ │ │ ├── LN_print.py │ │ │ ├── LN_read_file.py │ │ │ ├── LN_read_json.py │ │ │ ├── LN_read_storage.py │ │ │ ├── LN_script.py │ │ │ ├── LN_set_haxe_property.py │ │ │ ├── LN_set_vibrate.py │ │ │ ├── LN_shutdown.py │ │ │ ├── LN_write_file.py │ │ │ ├── LN_write_image.py │ │ │ ├── LN_write_json.py │ │ │ ├── LN_write_storage.py │ │ │ └── __init__.py │ │ ├── navmesh │ │ │ ├── LN_crowd_go_to_location.py │ │ │ ├── LN_get_agent_data.py │ │ │ ├── LN_go_to_location.py │ │ │ ├── LN_navigable_location.py │ │ │ ├── LN_pick_navmesh_location.py │ │ │ ├── LN_stop_agent.py │ │ │ └── __init__.py │ │ ├── network │ │ │ ├── LN_network_client.py │ │ │ ├── LN_network_close_connection.py │ │ │ ├── LN_network_event.py │ │ │ ├── LN_network_host.py │ │ │ ├── LN_network_host_close_client.py │ │ │ ├── LN_network_host_get_ip.py │ │ │ ├── LN_network_http_request.py │ │ │ ├── LN_network_message_parser.py │ │ │ ├── LN_network_open.py │ │ │ ├── LN_network_send_message.py │ │ │ └── __init__.py │ │ ├── object │ │ │ ├── LN_get_distance.py │ │ │ ├── LN_get_object_by_name.py │ │ │ ├── LN_get_object_by_uid.py │ │ │ ├── LN_get_object_child.py │ │ │ ├── LN_get_object_children.py │ │ │ ├── LN_get_object_geom.py │ │ │ ├── LN_get_object_mesh.py │ │ │ ├── LN_get_object_name.py │ │ │ ├── LN_get_object_offscreen.py │ │ │ ├── LN_get_object_parent.py │ │ │ ├── LN_get_object_property.py │ │ │ ├── LN_get_object_uid.py │ │ │ ├── LN_get_object_visible.py │ │ │ ├── LN_mesh.py │ │ │ ├── LN_object.py │ │ │ ├── LN_raycast_closest_object.py │ │ │ ├── LN_raycast_object.py │ │ │ ├── LN_raycast_ray.py │ │ │ ├── LN_remove_object.py │ │ │ ├── LN_remove_object_parent.py │ │ │ ├── LN_self_object.py │ │ │ ├── LN_set_object_mesh.py │ │ │ ├── LN_set_object_name.py │ │ │ ├── LN_set_object_parent.py │ │ │ ├── LN_set_object_property.py │ │ │ ├── LN_set_object_shape_key.py │ │ │ ├── LN_set_object_visible.py │ │ │ ├── LN_spawn_object.py │ │ │ ├── LN_spawn_object_by_name.py │ │ │ └── __init__.py │ │ ├── particle │ │ │ ├── LN_add_particle_to_object.py │ │ │ ├── LN_get_particle.py │ │ │ ├── LN_get_particle_data.py │ │ │ ├── LN_remove_particle_from_object.py │ │ │ ├── LN_set_particle_data.py │ │ │ ├── LN_set_particle_render_emitter.py │ │ │ ├── LN_set_particle_speed.py │ │ │ └── __init__.py │ │ ├── physics │ │ │ ├── LN_Add_rigid_body.py │ │ │ ├── LN_add_physics_constraint.py │ │ │ ├── LN_apply_force.py │ │ │ ├── LN_apply_force_at_location.py │ │ │ ├── LN_apply_impulse.py │ │ │ ├── LN_apply_impulse_at_location.py │ │ │ ├── LN_apply_torque.py │ │ │ ├── LN_apply_torque_impulse.py │ │ │ ├── LN_convex_cast.py │ │ │ ├── LN_convex_cast_on.py │ │ │ ├── LN_get_rb_contacts.py │ │ │ ├── LN_get_rb_data.py │ │ │ ├── LN_get_rb_first_contact.py │ │ │ ├── LN_get_rb_point_velocity.py │ │ │ ├── LN_get_rb_velocity.py │ │ │ ├── LN_get_world_gravity.py │ │ │ ├── LN_has_contact.py │ │ │ ├── LN_has_contact_array.py │ │ │ ├── LN_is_rb_active.py │ │ │ ├── LN_on_contact.py │ │ │ ├── LN_on_contact_array.py │ │ │ ├── LN_on_volume_trigger.py │ │ │ ├── LN_physics_constraint.py │ │ │ ├── LN_pick_rb.py │ │ │ ├── LN_ray_cast.py │ │ │ ├── LN_ray_cast_on.py │ │ │ ├── LN_remove_rb.py │ │ │ ├── LN_set_rb_activation_state.py │ │ │ ├── LN_set_rb_friction.py │ │ │ ├── LN_set_rb_gravity_enabled.py │ │ │ ├── LN_set_rb_velocity.py │ │ │ ├── LN_set_world_gravity.py │ │ │ ├── LN_volume_trigger.py │ │ │ └── __init__.py │ │ ├── postprocess │ │ │ ├── LN_colorgrading_get_global_node.py │ │ │ ├── LN_colorgrading_get_highlight_node.py │ │ │ ├── LN_colorgrading_get_midtone_node.py │ │ │ ├── LN_colorgrading_get_shadow_node.py │ │ │ ├── LN_colorgrading_set_global_node.py │ │ │ ├── LN_colorgrading_set_highlight_node.py │ │ │ ├── LN_colorgrading_set_midtone_node.py │ │ │ ├── LN_colorgrading_set_shadow_node.py │ │ │ ├── LN_get_auto_exposure_settings.py │ │ │ ├── LN_get_bloom_settings.py │ │ │ ├── LN_get_ca_settings.py │ │ │ ├── LN_get_camera_post_process.py │ │ │ ├── LN_get_lenstexture_settings.py │ │ │ ├── LN_get_letterbox_settings.py │ │ │ ├── LN_get_sharpen_settings.py │ │ │ ├── LN_get_ssao_settings.py │ │ │ ├── LN_get_ssr_settings.py │ │ │ ├── LN_get_volumetric_fog_settings.py │ │ │ ├── LN_get_volumetric_light_settings.py │ │ │ ├── LN_lenstexture_set.py │ │ │ ├── LN_set_auto_exposure_settings.py │ │ │ ├── LN_set_bloom_settings.py │ │ │ ├── LN_set_ca_settings.py │ │ │ ├── LN_set_camera_post_process.py │ │ │ ├── LN_set_letterbox_settings.py │ │ │ ├── LN_set_sharpen_settings.py │ │ │ ├── LN_set_ssao_settings.py │ │ │ ├── LN_set_ssr_settings.py │ │ │ ├── LN_set_volumetric_fog_settings.py │ │ │ ├── LN_set_volumetric_light_settings.py │ │ │ └── __init__.py │ │ ├── random │ │ │ ├── LN_probabilistic_output.py │ │ │ ├── LN_random_boolean.py │ │ │ ├── LN_random_choice.py │ │ │ ├── LN_random_color.py │ │ │ ├── LN_random_float.py │ │ │ ├── LN_random_integer.py │ │ │ ├── LN_random_output.py │ │ │ ├── LN_random_string.py │ │ │ ├── LN_random_vector.py │ │ │ └── __init__.py │ │ ├── renderpath │ │ │ ├── LN_create_render_target.py │ │ │ ├── LN_pause_active_camera_render.py │ │ │ ├── LN_rotate_render_target.py │ │ │ ├── LN_set_msaa_quality.py │ │ │ ├── LN_set_post_process_quality.py │ │ │ ├── LN_set_shader_uniform.py │ │ │ ├── LN_set_shadows_quality.py │ │ │ ├── LN_set_ssaa_quality.py │ │ │ └── __init__.py │ │ ├── replacement.py │ │ ├── scene │ │ │ ├── LN_add_object_to_collection.py │ │ │ ├── LN_collection.py │ │ │ ├── LN_create_collection.py │ │ │ ├── LN_get_collection.py │ │ │ ├── LN_get_object_collection.py │ │ │ ├── LN_get_scene_active.py │ │ │ ├── LN_get_scene_root.py │ │ │ ├── LN_global_object.py │ │ │ ├── LN_remove_collection.py │ │ │ ├── LN_remove_object_from_collection.py │ │ │ ├── LN_remove_scene_active.py │ │ │ ├── LN_set_scene_active.py │ │ │ ├── LN_spawn_collection.py │ │ │ ├── LN_spawn_scene.py │ │ │ └── __init__.py │ │ ├── sound │ │ │ ├── LN_pause_speaker.py │ │ │ ├── LN_play_sound.py │ │ │ ├── LN_play_speaker.py │ │ │ ├── LN_set_sound_speaker.py │ │ │ ├── LN_set_volume_speaker.py │ │ │ ├── LN_stop_speaker.py │ │ │ └── __init__.py │ │ ├── string │ │ │ ├── LN_concatenate_string.py │ │ │ ├── LN_parse_float.py │ │ │ ├── LN_parse_int.py │ │ │ ├── LN_split_string.py │ │ │ ├── LN_string.py │ │ │ ├── LN_string_case.py │ │ │ ├── LN_string_charat.py │ │ │ ├── LN_string_contains.py │ │ │ ├── LN_string_length.py │ │ │ ├── LN_string_replace.py │ │ │ ├── LN_sub_string.py │ │ │ └── __init__.py │ │ ├── trait │ │ │ ├── LN_add_trait_to_object.py │ │ │ ├── LN_get_object_trait.py │ │ │ ├── LN_get_object_traits.py │ │ │ ├── LN_get_trait_name.py │ │ │ ├── LN_get_trait_paused.py │ │ │ ├── LN_remove_trait.py │ │ │ ├── LN_remove_trait_from_object.py │ │ │ ├── LN_self_trait.py │ │ │ ├── LN_set_trait_paused.py │ │ │ ├── LN_trait.py │ │ │ └── __init__.py │ │ ├── transform │ │ │ ├── LN_append_transform.py │ │ │ ├── LN_get_object_dimension.py │ │ │ ├── LN_get_object_location.py │ │ │ ├── LN_get_object_rotation.py │ │ │ ├── LN_get_object_scale.py │ │ │ ├── LN_get_object_transform.py │ │ │ ├── LN_get_world_orientation.py │ │ │ ├── LN_look_at.py │ │ │ ├── LN_rotate_object.py │ │ │ ├── LN_separate_rotation.py │ │ │ ├── LN_separate_transform.py │ │ │ ├── LN_set_object_location.py │ │ │ ├── LN_set_object_rotation.py │ │ │ ├── LN_set_object_scale.py │ │ │ ├── LN_set_object_transform.py │ │ │ ├── LN_transform_math.py │ │ │ ├── LN_transform_to_rotation.py │ │ │ ├── LN_transform_to_vector.py │ │ │ ├── LN_translate_object.py │ │ │ ├── LN_translate_on_local_axis.py │ │ │ ├── LN_vector_to_object_orientation.py │ │ │ ├── LN_world_vector_to_local_space.py │ │ │ └── __init__.py │ │ ├── tree_variables.py │ │ ├── variable │ │ │ ├── LN_boolean.py │ │ │ ├── LN_color.py │ │ │ ├── LN_dynamic.py │ │ │ ├── LN_float.py │ │ │ ├── LN_integer.py │ │ │ ├── LN_mask.py │ │ │ ├── LN_retain_value.py │ │ │ ├── LN_rotation.py │ │ │ ├── LN_scene.py │ │ │ ├── LN_set_variable.py │ │ │ ├── LN_transform.py │ │ │ ├── LN_vector.py │ │ │ └── __init__.py │ │ └── world │ │ │ ├── LN_get_hosekwilkie_properties.py │ │ │ ├── LN_get_nishita_properties.py │ │ │ ├── LN_get_world_strength.py │ │ │ ├── LN_set_hosekwilkie_properties.py │ │ │ ├── LN_set_nishita_properties.py │ │ │ ├── LN_set_world_strength.py │ │ │ └── __init__.py │ ├── make.py │ ├── make_logic.py │ ├── make_renderpath.py │ ├── make_state.py │ ├── make_world.py │ ├── material │ │ ├── __init__.py │ │ ├── arm_nodes │ │ │ ├── __init__.py │ │ │ ├── arm_nodes.py │ │ │ ├── custom_particle_node.py │ │ │ └── shader_data_node.py │ │ ├── cycles.py │ │ ├── cycles_functions.py │ │ ├── cycles_nodes │ │ │ ├── __init__.py │ │ │ ├── nodes_color.py │ │ │ ├── nodes_converter.py │ │ │ ├── nodes_input.py │ │ │ ├── nodes_shader.py │ │ │ ├── nodes_texture.py │ │ │ └── nodes_vector.py │ │ ├── make.py │ │ ├── make_attrib.py │ │ ├── make_cluster.py │ │ ├── make_decal.py │ │ ├── make_depth.py │ │ ├── make_finalize.py │ │ ├── make_inst.py │ │ ├── make_mesh.py │ │ ├── make_morph_target.py │ │ ├── make_overlay.py │ │ ├── make_particle.py │ │ ├── make_refract.py │ │ ├── make_refraction_buffer.py │ │ ├── make_shader.py │ │ ├── make_skin.py │ │ ├── make_tess.py │ │ ├── make_transluc.py │ │ ├── make_voxel.py │ │ ├── mat_batch.py │ │ ├── mat_state.py │ │ ├── mat_utils.py │ │ ├── node_meta.py │ │ ├── parser_state.py │ │ └── shader.py │ ├── node_utils.py │ ├── nodes_logic.py │ ├── nodes_material.py │ ├── profiler.py │ ├── props.py │ ├── props_bake.py │ ├── props_collision_filter_mask.py │ ├── props_exporter.py │ ├── props_lod.py │ ├── props_properties.py │ ├── props_renderpath.py │ ├── props_tilesheet.py │ ├── props_traits.py │ ├── props_traits_props.py │ ├── props_ui.py │ ├── ui_icons.py │ ├── utils.py │ ├── utils_vs.py │ ├── write_data.py │ └── write_probes.py │ ├── data │ ├── arm_data.blend │ ├── haxelogic.py │ └── skydome.blend │ └── start.py ├── changes.md ├── checkstyle.json └── lib └── armory2d ├── Assets ├── black_white_gradient.png ├── color_wheel.png ├── font_default.ttf ├── icons.png └── icons.svg ├── Sources ├── Main.hx └── arm2d │ ├── Assets.hx │ ├── Editor.hx │ ├── ElementController.hx │ ├── Path.hx │ ├── tools │ ├── CanvasTools.hx │ └── Math.hx │ └── ui │ ├── UIProperties.hx │ └── UIToolBar.hx └── khafile.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | tab_width = 4 6 | indent_style = tab 7 | 8 | [*.py] 9 | indent_size = 4 10 | tab_width = 4 11 | indent_style = space 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.hdr binary 2 | blender/arm/props.py ident 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | custom: ['https://armory3d.org/fund'] 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a bug report 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | Thank you for contributing to Armory! 10 | 11 | **Description** 12 | Issue description. 13 | 14 | **To Reproduce** 15 | Steps to reproduce the behavior. 16 | 17 | **Expected behavior** 18 | What you expected to happen. 19 | 20 | **System** 21 | Blender: 22 | Armory: 23 | OS: 24 | Graphics card: 25 | 26 | **Test File** 27 | *(drag & drop the zipped .blend file here)* 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Create a feature request 4 | title: '' 5 | labels: feature request 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.DS_Store 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.detectIndentation": false, 3 | "editor.tabSize": 4, 4 | "editor.insertSpaces": false, 5 | "[python]": { 6 | "editor.insertSpaces": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | krom/ 3 | pages/ 4 | api.xml 5 | -------------------------------------------------------------------------------- /api/Main.hx: -------------------------------------------------------------------------------- 1 | package ; 2 | class Main { 3 | public static inline var projectName = 'untitled'; 4 | public static inline var projectPackage = 'arm'; 5 | public static inline var projectVersion = '1.0.0'; 6 | public static function main() {} 7 | } 8 | -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | 2 | Building API docs: 3 | - Install [Haxe](https://haxe.org/) and [dox](https://github.com/HaxeFoundation/dox) 4 | - Open terminal at `armsdk/api` 5 | - Run `haxe api.hxml -xml build/api.xml -D doc-gen` to build xml description 6 | - Run `haxe dox.hxml` to generate html into the `pages/` directory 7 | -------------------------------------------------------------------------------- /api/dox.hxml: -------------------------------------------------------------------------------- 1 | -cmd haxelib run dox -i build -o pages --title "Armory 3D Engine" -D themeColor 0xcf2b43 -D textColor 0xffffff -D website "https://armory3d.org/" -D logo "https://avatars.githubusercontent.com/u/20436620?s=48" -theme ./theme 2 | -------------------------------------------------------------------------------- /api/krom-resources/painter-colored.frag.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-colored.frag.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-colored.vert.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-colored.vert.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-image.frag.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-image.frag.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-image.vert.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-image.vert.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-text.frag.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-text.frag.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-text.vert.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-text.vert.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-video.frag.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-video.frag.d3d11 -------------------------------------------------------------------------------- /api/krom-resources/painter-video.vert.d3d11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/krom-resources/painter-video.vert.d3d11 -------------------------------------------------------------------------------- /api/theme/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Armory3D Theme", 3 | "author": "armory3d", 4 | "parentTheme": "default" 5 | } 6 | -------------------------------------------------------------------------------- /api/theme/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/api/theme/resources/favicon.ico -------------------------------------------------------------------------------- /armory/Assets/blue_noise64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/blue_noise64.png -------------------------------------------------------------------------------- /armory/Assets/brdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/brdf.png -------------------------------------------------------------------------------- /armory/Assets/clouds_base.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/clouds_base.raw -------------------------------------------------------------------------------- /armory/Assets/clouds_detail.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/clouds_detail.raw -------------------------------------------------------------------------------- /armory/Assets/clouds_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/clouds_map.png -------------------------------------------------------------------------------- /armory/Assets/font_default.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/font_default.ttf -------------------------------------------------------------------------------- /armory/Assets/font_default_full.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/font_default_full.ttf -------------------------------------------------------------------------------- /armory/Assets/font_mono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/font_mono.ttf -------------------------------------------------------------------------------- /armory/Assets/font_mono_full.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/font_mono_full.ttf -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_0.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_0.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_1.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_1.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_2.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_2.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_3.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_3.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_4.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_4.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_5.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_5.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_6.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_6.hdr -------------------------------------------------------------------------------- /armory/Assets/hosek/hosek_radiance_7.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/hosek/hosek_radiance_7.hdr -------------------------------------------------------------------------------- /armory/Assets/noise256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/noise256.png -------------------------------------------------------------------------------- /armory/Assets/noise64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/noise64.png -------------------------------------------------------------------------------- /armory/Assets/noise8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/noise8.png -------------------------------------------------------------------------------- /armory/Assets/smaa_area.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/smaa_area.png -------------------------------------------------------------------------------- /armory/Assets/smaa_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/smaa_search.png -------------------------------------------------------------------------------- /armory/Assets/water_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/water_base.png -------------------------------------------------------------------------------- /armory/Assets/water_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/water_detail.png -------------------------------------------------------------------------------- /armory/Assets/water_foam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/Assets/water_foam.png -------------------------------------------------------------------------------- /armory/Shaders/blend_pass/blend_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "blend_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "blend_source": "blend_one", 9 | "blend_destination": "blend_one", 10 | "blend_operation": "add", 11 | "links": [], 12 | "texture_params": [], 13 | "vertex_shader": "../include/pass.vert.glsl", 14 | "fragment_shader": "../include/pass_copy.frag.glsl" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /armory/Shaders/clear_color_depth_pass/clear_color_depth_pass.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | in vec2 texCoord; 4 | out vec4 fragColor; 5 | 6 | void main() { 7 | fragColor = vec4(0.0, 0.0, 0.0, 1.0); 8 | gl_FragDepth = 1.0; 9 | } 10 | -------------------------------------------------------------------------------- /armory/Shaders/clear_color_depth_pass/clear_color_depth_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "clear_color_depth_pass", 5 | "depth_write": true, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "clear_color_depth_pass.frag.glsl", 12 | "color_attachments": ["_HDR"] 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /armory/Shaders/clear_color_pass/clear_color_pass.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | in vec2 texCoord; 4 | out vec4 fragColor; 5 | 6 | void main() { 7 | fragColor = vec4(0.0, 0.0, 0.0, 1.0); 8 | } 9 | -------------------------------------------------------------------------------- /armory/Shaders/clear_color_pass/clear_color_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "clear_color_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "clear_color_pass.frag.glsl", 12 | "color_attachments": ["_HDR"] 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /armory/Shaders/clear_depth_pass/clear_depth_pass.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | in vec2 texCoord; 4 | out vec4 fragColor; 5 | 6 | void main() { 7 | gl_FragDepth = 1.0; 8 | } 9 | -------------------------------------------------------------------------------- /armory/Shaders/clear_depth_pass/clear_depth_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "clear_depth_pass", 5 | "depth_write": true, 6 | "color_write_red": false, 7 | "color_write_green": false, 8 | "color_write_blue": false, 9 | "color_write_alpha": false, 10 | "compare_mode": "always", 11 | "cull_mode": "none", 12 | "links": [], 13 | "texture_params": [], 14 | "vertex_shader": "../include/pass.vert.glsl", 15 | "fragment_shader": "clear_depth_pass.frag.glsl", 16 | "color_attachments": ["_HDR"] 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/copy_mrt2_pass/copy_mrt2_pass.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | uniform sampler2D tex0; 4 | uniform sampler2D tex1; 5 | 6 | in vec2 texCoord; 7 | out vec4 fragColor[2]; 8 | 9 | void main() { 10 | fragColor[0] = textureLod(tex0, texCoord, 0.0); 11 | fragColor[1] = textureLod(tex1, texCoord, 0.0); 12 | } 13 | -------------------------------------------------------------------------------- /armory/Shaders/copy_mrt2_pass/copy_mrt2_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "copy_mrt2_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "copy_mrt2_pass.frag.glsl" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/copy_mrt3_pass/copy_mrt3_pass.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | uniform sampler2D tex0; 4 | uniform sampler2D tex1; 5 | uniform sampler2D tex2; 6 | 7 | in vec2 texCoord; 8 | out vec4 fragColor[3]; 9 | 10 | void main() { 11 | fragColor[0] = textureLod(tex0, texCoord, 0.0); 12 | fragColor[1] = textureLod(tex1, texCoord, 0.0); 13 | fragColor[2] = textureLod(tex2, texCoord, 0.0); 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/copy_mrt3_pass/copy_mrt3_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "copy_mrt3_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "copy_mrt3_pass.frag.glsl" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/copy_pass/copy_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "copy_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "../include/pass_copy.frag.glsl" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/custom_mat_presets/custom_mat_forward.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // Color of each fragment on the screen 4 | out vec4 fragColor; 5 | 6 | void main() { 7 | // Shadeless white color 8 | fragColor = vec4(1.0); 9 | } 10 | -------------------------------------------------------------------------------- /armory/Shaders/custom_mat_presets/custom_mat_forward.vert.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | // World to view projection matrix to correctly position the vertex on screen 4 | uniform mat4 WVP; 5 | 6 | // Position vector of the current vertex in local space 7 | in vec3 pos; 8 | 9 | void main() { 10 | gl_Position = WVP * vec4(pos, 1.0); 11 | } 12 | -------------------------------------------------------------------------------- /armory/Shaders/debug_draw/line.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | in vec3 color; 4 | out vec4 fragColor; 5 | 6 | void main() { 7 | fragColor = vec4(color, 1.0); 8 | } 9 | -------------------------------------------------------------------------------- /armory/Shaders/debug_draw/line.vert.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | in vec3 pos; 4 | in vec3 col; 5 | 6 | uniform mat4 ViewProjection; 7 | out vec3 color; 8 | 9 | void main() { 10 | color = col; 11 | gl_Position = ViewProjection * vec4(pos, 1.0); 12 | } 13 | -------------------------------------------------------------------------------- /armory/Shaders/debug_draw/line_deferred.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | #include "compiled.inc" 4 | 5 | in vec3 color; 6 | out vec4 fragColor[GBUF_SIZE]; 7 | 8 | void main() { 9 | fragColor[GBUF_IDX_0] = vec4(1.0, 1.0, 0.0, 1.0); 10 | fragColor[GBUF_IDX_1] = vec4(color, 1.0); 11 | 12 | #ifdef _EmissionShaded 13 | fragColor[GBUF_IDX_EMISSION] = vec4(0.0); 14 | #endif 15 | } 16 | -------------------------------------------------------------------------------- /armory/Shaders/deferred_light_solid/deferred_light.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | #include "compiled.inc" 4 | #include "std/gbuffer.glsl" 5 | 6 | uniform sampler2D gbuffer1; 7 | 8 | in vec2 texCoord; 9 | out vec4 fragColor; 10 | 11 | void main() { 12 | fragColor.rgb = textureLod(gbuffer1, texCoord, 0.0).rgb; // Basecolor.rgb 13 | } 14 | -------------------------------------------------------------------------------- /armory/Shaders/deferred_light_solid/deferred_light_solid.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "deferred_light", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "vertex_shader": "../include/pass.vert.glsl", 10 | "fragment_shader": "deferred_light.frag.glsl", 11 | "color_attachments": ["RGBA64"] 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/downsample_depth/downsample_depth.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "downsample_depth", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [ 9 | { 10 | "name": "screenSizeInv", 11 | "link": "_screenSizeInv" 12 | } 13 | ], 14 | "texture_params": [], 15 | "vertex_shader": "../include/pass.vert.glsl", 16 | "fragment_shader": "downsample_depth.frag.glsl" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/fxaa_pass/fxaa_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "fxaa_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [ 9 | { 10 | "name": "screenSizeInv", 11 | "link": "_screenSizeInv" 12 | } 13 | ], 14 | "texture_params": [], 15 | "vertex_shader": "../include/pass.vert.glsl", 16 | "fragment_shader": "fxaa_pass.frag.glsl" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/include/pass.vert.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | #include "compiled.inc" 4 | 5 | in vec2 pos; 6 | 7 | out vec2 texCoord; 8 | 9 | void main() { 10 | // Scale vertex attribute to 0-1 range 11 | const vec2 madd = vec2(0.5, 0.5); 12 | texCoord = pos.xy * madd + madd; 13 | #ifdef _InvY 14 | texCoord.y = 1.0 - texCoord.y; 15 | #endif 16 | 17 | gl_Position = vec4(pos.xy, 0.0, 1.0); 18 | } 19 | -------------------------------------------------------------------------------- /armory/Shaders/include/pass_copy.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | uniform sampler2D tex; 4 | 5 | in vec2 texCoord; 6 | out vec4 fragColor; 7 | 8 | void main() { 9 | fragColor = textureLod(tex, texCoord, 0.0); 10 | } 11 | -------------------------------------------------------------------------------- /armory/Shaders/include/pass_volume.vert.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | uniform mat4 VWVP; 4 | 5 | in vec3 pos; 6 | 7 | out vec4 wvpposition; 8 | 9 | void main() { 10 | wvpposition = VWVP * vec4(pos, 1.0); 11 | gl_Position = wvpposition; 12 | } 13 | -------------------------------------------------------------------------------- /armory/Shaders/smaa_edge_detect/smaa_edge_detect.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "smaa_edge_detect", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [ 9 | { 10 | "name": "screenSizeInv", 11 | "link": "_screenSizeInv" 12 | } 13 | ], 14 | "texture_params": [], 15 | "vertex_shader": "smaa_edge_detect.vert.glsl", 16 | "fragment_shader": "smaa_edge_detect.frag.glsl" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/smaa_neighborhood_blend/smaa_neighborhood_blend.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "smaa_neighborhood_blend", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [ 9 | { 10 | "name": "screenSizeInv", 11 | "link": "_screenSizeInv" 12 | } 13 | ], 14 | "texture_params": [], 15 | "vertex_shader": "smaa_neighborhood_blend.vert.glsl", 16 | "fragment_shader": "smaa_neighborhood_blend.frag.glsl" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/supersample_resolve/supersample_resolve.frag.glsl: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | #include "std/filters.glsl" 4 | 5 | uniform sampler2D tex; 6 | uniform vec2 screenSizeInv; 7 | 8 | in vec2 texCoord; 9 | out vec4 fragColor; 10 | 11 | void main() { 12 | // 4X resolve 13 | fragColor = textureSS(tex, texCoord, screenSizeInv / 4.0); 14 | } 15 | -------------------------------------------------------------------------------- /armory/Shaders/supersample_resolve/supersample_resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "supersample_resolve", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [ 9 | { 10 | "name": "screenSizeInv", 11 | "link": "_screenSizeInv" 12 | } 13 | ], 14 | "texture_params": [], 15 | "vertex_shader": "../include/pass.vert.glsl", 16 | "fragment_shader": "supersample_resolve.frag.glsl" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /armory/Shaders/taa_pass/taa_pass.json: -------------------------------------------------------------------------------- 1 | { 2 | "contexts": [ 3 | { 4 | "name": "taa_pass", 5 | "depth_write": false, 6 | "compare_mode": "always", 7 | "cull_mode": "none", 8 | "links": [], 9 | "texture_params": [], 10 | "vertex_shader": "../include/pass.vert.glsl", 11 | "fragment_shader": "taa_pass.frag.glsl" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/import.hx: -------------------------------------------------------------------------------- 1 | import armory.system.Assert.*; 2 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ActiveCameraNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ActiveCameraNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { return iron.Scene.active.camera; } 10 | } 11 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ActiveSceneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ActiveSceneNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { return iron.Scene.active.raw.name; } 10 | } 11 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AddObjectToGroupNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class AddObjectToGroupNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var groupName: String = inputs[1].get(); 13 | var object: Object = inputs[2].get(); 14 | 15 | iron.Scene.active.getGroup(groupName).push(object); 16 | 17 | runOutput(0); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AlertNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class AlertNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | 11 | #if kha_html5 12 | js.Browser.window.alert(inputs[1].get()); 13 | #end 14 | 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AlternateNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class AlternateNode extends LogicNode { 4 | 5 | var i = 0; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | 13 | if(i >= outputs.length) i = 0; 14 | runOutput(i); 15 | ++i; 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AnimActionNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class AnimActionNode extends LogicNode { 4 | 5 | public var value: String; 6 | 7 | public function new(tree: LogicTree, value = "") { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | if (inputs.length > 0) return inputs[0].get(); 14 | return value; 15 | } 16 | 17 | override function set(value: Dynamic) { 18 | if (inputs.length > 0) inputs[0].set(value); 19 | else this.value = value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayCompareNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayCompareNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar1: Array = inputs[0].get(); 11 | var ar2: Array = inputs[1].get(); 12 | 13 | return ar1.toString() == ar2.toString() ? true : false; 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayConcatNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayConcatNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar1: Array = inputs[0].get(); 11 | var ar2: Array = inputs[1].get(); 12 | 13 | var ar = ar1.concat(ar2); 14 | 15 | return from == 0 ? ar : ar.length; 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayGetNextNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayGetNextNode extends LogicNode { 4 | 5 | var i = 0; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var ar: Array = inputs[0].get(); 13 | 14 | if (ar == null) return null; 15 | 16 | var value = ar[i]; 17 | 18 | if (i < ar.length - 1) 19 | i++; 20 | else 21 | i = 0; 22 | 23 | return value; 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayInArrayNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayInArrayNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var array: Array = inputs[0].get(); 11 | array = array.map(item -> Std.string(item)); 12 | var value: Dynamic = inputs[1].get(); 13 | 14 | return array.indexOf(Std.string(value)) != -1; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayIndexNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayIndexNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var array: Array = inputs[0].get(); 11 | array = array.map(item -> Std.string(item)); 12 | var value: Dynamic = inputs[1].get(); 13 | var from: Int = inputs[2].get(); 14 | 15 | return array.indexOf(Std.string(value), from); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayLengthNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayLengthNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar: Array = inputs[0].get(); 11 | return ar != null ? ar.length : 0; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayPopNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayPopNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar: Array = inputs[0].get(); 11 | if (ar == null) return null; 12 | 13 | return ar.pop(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayResizeNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayResizeNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var ar: Array = inputs[1].get(); 11 | if (ar == null) return; 12 | 13 | var len = inputs[2].get(); 14 | 15 | ar.resize(len); 16 | 17 | runOutput(0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayReverseNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayReverseNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar: Array = inputs[0].get(); 11 | 12 | var arr = ar.copy(); 13 | 14 | arr.reverse(); 15 | 16 | return arr; 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArraySetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArraySetNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var ar: Array = inputs[1].get(); 11 | if (ar == null) return; 12 | 13 | var i: Int = inputs[2].get(); 14 | var value: Dynamic = inputs[3].get(); 15 | 16 | if (i < 0) ar[ar.length + i] = value; 17 | else ar[i] = value; 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArrayShiftNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArrayShiftNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar: Array = inputs[0].get(); 11 | if (ar == null) return null; 12 | 13 | return ar.shift(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ArraySortNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ArraySortNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var ar: Array = inputs[0].get(); 11 | var desc: Bool = inputs[1].get(); 12 | 13 | var arr = ar.copy(); 14 | 15 | arr.sort(Reflect.compare); 16 | 17 | if (desc) arr.reverse(); 18 | 19 | return arr; 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AutoExposureGetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class AutoExposureGetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from:Int):Dynamic { 10 | return switch (from) { 11 | case 0: armory.renderpath.Postprocess.auto_exposure_uniforms[0]; 12 | case 1: armory.renderpath.Postprocess.auto_exposure_uniforms[1]; 13 | default: 0.0; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/AutoExposureSetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class AutoExposureSetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from:Int) { 10 | armory.renderpath.Postprocess.auto_exposure_uniforms[0] = inputs[1].get(); 11 | armory.renderpath.Postprocess.auto_exposure_uniforms[1] = inputs[2].get(); 12 | 13 | runOutput(0); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/BooleanNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class BooleanNode extends LogicNode { 4 | 5 | public var value: Bool; 6 | 7 | public function new(tree: LogicTree, value = false) { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | if (inputs.length > 0) return inputs[0].get(); 14 | return value; 15 | } 16 | 17 | override function set(value: Dynamic) { 18 | if (inputs.length > 0) inputs[0].set(value); 19 | else this.value = value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/BranchNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class BranchNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var b: Bool = inputs[1].get(); 11 | b ? runOutput(0) : runOutput(1); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/CallGroupNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class CallGroupNode extends LogicNode { 4 | 5 | public var property0: String; 6 | public function new(tree: LogicTree) { 7 | super(tree); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/CaseStringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class CaseStringNode extends LogicNode { 4 | 5 | public var property0: String; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var s: String = inputs[0].get(); 13 | if (s == null) return null; 14 | 15 | switch (property0) { 16 | case "Upper Case": 17 | return s.toUpperCase(); 18 | case "Lower Case": 19 | return s.toLowerCase(); 20 | } 21 | 22 | return false; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ClampNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import kha.FastFloat; 4 | 5 | class ClampNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): FastFloat { 12 | var value = inputs[0].get(); 13 | var min = inputs[1].get(); 14 | var max = inputs[2].get(); 15 | 16 | return value < min ? min : value > max ? max : value; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ClearConsoleNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ClearConsoleNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | 11 | #if kha_krom 12 | Krom.sysCommand("cls"); 13 | #elseif kha_html5 14 | js.Syntax.code("console.clear();"); 15 | #end 16 | 17 | runOutput(0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ClearMapNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | 4 | class ClearMapNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function run(from: Int) { 11 | var map: Map = inputs[1].get(); 12 | if (map == null) return null; 13 | 14 | map.clear(); 15 | runOutput(0); 16 | return; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ConcatenateStringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ConcatenateStringNode extends LogicNode { 4 | 5 | public var value: String; 6 | 7 | public function new(tree: LogicTree, value = "") { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | value = ""; 14 | for (inp in inputs) value += inp.get(); 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ConfirmNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ConfirmNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | 11 | #if kha_html5 12 | var answer: Bool = js.Browser.window.confirm(inputs[1].get()); 13 | if(answer) 14 | return runOutput(0); 15 | else 16 | return runOutput(1); 17 | #end 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/DefaultIfNullNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class DefaultIfNullNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var v1 = inputs[0].get(); 11 | var v2 = inputs[1].get(); 12 | 13 | v1 != null ? return v1 : return v2; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/DegToRadNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class DegToRadNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var deg: Float = inputs[0].get(); 11 | return deg * 0.0174532924; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/DetectMobileBrowserNode.hx: -------------------------------------------------------------------------------- 1 | // This node does not work with Krom. "Browser compilation only" node. 2 | 3 | package armory.logicnode; 4 | 5 | import kha.System; 6 | 7 | class DetectMobileBrowserNode extends LogicNode { 8 | 9 | public function new(tree: LogicTree) { 10 | super(tree); 11 | } 12 | 13 | override function get(from: Int): Dynamic { 14 | if (from == 0) { 15 | #if kha_html5 16 | return kha.SystemImpl.mobile; 17 | #else 18 | return false; 19 | #end 20 | } 21 | return null; 22 | } 23 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/DisplayInfoNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class DisplayInfoNode extends LogicNode { 4 | 5 | static inline var displayIndex = 0; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | if (from == 0) return kha.Display.all[displayIndex].width; 13 | else return kha.Display.all[displayIndex].height; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/DynamicNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class DynamicNode extends LogicNode { 4 | 5 | public var value: Dynamic; 6 | 7 | public function new(tree: LogicTree, value: Dynamic = null) { 8 | super(tree); 9 | this.value = value == null ? {} : value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | return value; 14 | } 15 | 16 | override function set(value: Dynamic) { 17 | this.value = value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/FloatNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class FloatNode extends LogicNode { 4 | 5 | public var value: Float; 6 | 7 | public function new(tree: LogicTree, value = 0.0) { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | if (inputs.length > 0) return inputs[0].get(); 14 | return value; 15 | } 16 | 17 | override function set(value: Dynamic) { 18 | if (inputs.length > 0) inputs[0].set(value); 19 | else this.value = value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/FunctionOutputNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class FunctionOutputNode extends LogicNode { 4 | 5 | @:allow(armory.logicnode.LogicTree) 6 | var result: Dynamic; 7 | 8 | public function new(tree: LogicTree) { 9 | super(tree); 10 | } 11 | 12 | override function run(from: Int) { 13 | this.result = inputs[1].get(); 14 | runOutput(0); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCameraAspectNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class GetCameraAspectNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var camera: CameraObject = inputs[0].get(); 13 | 14 | if (camera == null) return null; 15 | 16 | return camera.data.raw.aspect != null ? camera.data.raw.aspect : iron.App.w() / iron.App.h(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCameraFovNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class GetCameraFovNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var camera: CameraObject = inputs[0].get(); 13 | 14 | if (camera == null) return 0.0; 15 | 16 | return camera.data.raw.fov; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCameraScaleNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class GetCameraScaleNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var camera: CameraObject = inputs[0].get(); 13 | 14 | if (camera == null) return null; 15 | 16 | return camera.data.raw.ortho[1]*2; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCameraStartEndNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class GetCameraStartEndNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var camera: CameraObject = inputs[0].get(); 13 | 14 | if (camera == null) return null; 15 | 16 | return from == 0 ? camera.data.raw.near_plane : camera.data.raw.far_plane; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCameraTypeNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class GetCameraTypeNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var camera: CameraObject = inputs[0].get(); 13 | 14 | if (camera == null) return null; 15 | 16 | return camera.data.raw.ortho != null ? 1 : 0; 17 | } 18 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetChildrenNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetChildrenNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.children; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetCursorLocationNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetCursorLocationNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var mouse = iron.system.Input.getMouse(); 11 | 12 | return switch (from) { 13 | case 0: mouse.x; 14 | case 1: mouse.y; 15 | case 2: mouse.x * -1; 16 | case 3: mouse.y * -1; 17 | default: null; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetDimensionNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetDimensionNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.transform.dim; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetGravityNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetGravityNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | 11 | #if arm_physics 12 | var physics = armory.trait.physics.PhysicsWorld.active; 13 | 14 | return physics.getGravity(); 15 | #end 16 | 17 | return null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetGroupNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetGroupNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var groupName: String = inputs[0].get(); 11 | return iron.Scene.active.getGroup(groupName); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetHaxePropertyNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetHaxePropertyNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var object: Dynamic = inputs[0].get(); 11 | var property: String = inputs[1].get(); 12 | 13 | if (object == null) return null; 14 | 15 | return Reflect.getProperty(object, property); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetMapValueNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | 4 | class GetMapValueNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function get(from: Int): Dynamic { 11 | var map: Map = inputs[0].get(); 12 | if (map == null) return null; 13 | 14 | var key: Dynamic = inputs[1].get(); 15 | return map.get(key); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetMeshNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class GetMeshNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: MeshObject = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.data; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetMouseLockNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.system.Input; 4 | 5 | class GetMouseLockNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var mouse = iron.system.Input.getMouse(); 13 | 14 | return mouse.locked; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetMouseVisibleNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.system.Input; 4 | 5 | class GetMouseVisibleNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var mouse = iron.system.Input.getMouse(); 13 | 14 | if (mouse.hidden == false) return true; 15 | 16 | return false; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetNameNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetNameNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return ""; 15 | 16 | return object.name; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetObjectByUidNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.data.SceneFormat; 4 | import iron.object.Object; 5 | 6 | class GetObjectByUidNode extends LogicNode { 7 | 8 | public function new(tree: LogicTree) { 9 | super(tree); 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | var objectUid: Int = inputs[0].get(); 14 | 15 | var obj = iron.Scene.active.getChildren(true); 16 | 17 | for (obji in obj) if (obji.uid == objectUid) return obji; 18 | 19 | return null; 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetObjectNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.data.SceneFormat; 4 | import iron.object.Object; 5 | 6 | class GetObjectNode extends LogicNode { 7 | 8 | /** Scene from which to take the object **/ 9 | public var property0: Null; 10 | 11 | public function new(tree: LogicTree) { 12 | super(tree); 13 | } 14 | 15 | override function get(from: Int): Dynamic { 16 | var objectName: String = inputs[0].get(); 17 | 18 | return iron.Scene.active.getChild(objectName); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetObjectTraitsNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetObjectTraitsNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | if (object == null) return null; 14 | return object.traits; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetParentNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetParentNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.parent; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetScaleNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetScaleNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.transform.scale; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetSystemLanguage.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetSystemLanguage extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | if (from == 0) return kha.System.language; 11 | return null; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetTraitPausedNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetTraitPausedNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var trait: Dynamic = inputs[0].get(); 11 | 12 | if (trait == null) return null; 13 | 14 | return trait.paused; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetTransformNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetTransformNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.transform.world; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetUidNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class GetUidNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var object: Object = inputs[0].get(); 13 | 14 | if (object == null) return null; 15 | 16 | return object.uid; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GetWorldStrengthNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GetWorldStrengthNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return iron.Scene.active.world.raw.probe.strength; 11 | } 12 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GlobalObjectNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GlobalObjectNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return iron.Scene.global; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GroupInputsNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GroupInputsNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | runOutput(from); 11 | } 12 | 13 | override function get(from: Int): Dynamic { 14 | return inputs[from].get(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GroupNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.Scene; 4 | 5 | class GroupNode extends LogicNode { 6 | 7 | public var property0: String; 8 | 9 | public function new(tree: LogicTree) { 10 | super(tree); 11 | } 12 | 13 | override function get(from: Int): Dynamic { 14 | return Scene.active.getGroup(property0); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/GroupOutputsNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class GroupOutputsNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | runOutput(from); 11 | } 12 | 13 | override function get(from: Int): Dynamic { 14 | return inputs[from].get(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IntFromBooleanNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IntFromBooleanNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | 11 | var bool = inputs[0].get(); 12 | 13 | return bool ? 1 : 0; 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IntegerNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IntegerNode extends LogicNode { 4 | 5 | public var value: Int; 6 | 7 | public function new(tree: LogicTree, value = 0) { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | if (inputs.length > 0) return inputs[0].get(); 14 | return value; 15 | } 16 | 17 | override function set(value: Dynamic) { 18 | if (inputs.length > 0) inputs[0].set(value); 19 | else this.value = value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/InverseNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class InverseNode extends LogicNode { 4 | 5 | var c = false; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | tree.notifyOnUpdate(update); 10 | } 11 | 12 | override function run(from: Int) { 13 | c = true; 14 | } 15 | 16 | function update() { 17 | if (!c) runOutput(0); 18 | c = false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IsFalseNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IsFalseNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var v1: Bool = inputs[1].get(); 11 | if (!v1) runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IsNoneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IsNoneNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var v1: Dynamic = inputs[1].get(); 11 | if (v1 == null) runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IsNotNoneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IsNotNoneNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var v1: Dynamic = inputs[1].get(); 11 | if (v1 != null) runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/IsTrueNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class IsTrueNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var v1: Bool = inputs[1].get(); 11 | if (v1) runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/JsonStringifyNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | import haxe.Json; 3 | 4 | class JsonStringifyNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function get(from: Int):Dynamic { 11 | return Json.stringify(inputs[0].get()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/LengthStringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class LengthStringNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var s: String = inputs[0].get(); 11 | if (s == null) return null; 12 | 13 | return s.length; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/LetterboxGetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class LetterboxGetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from:Int):Dynamic { 10 | return switch (from) { 11 | case 0: armory.renderpath.Postprocess.letterbox_uniforms[0]; 12 | case 1: armory.renderpath.Postprocess.letterbox_uniforms[1][0]; 13 | default: 0.0; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/LoopBreakNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class LoopBreakNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | tree.loopBreak = true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/LoopContinueNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class LoopContinueNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | tree.loopContinue = true; 11 | } 12 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/MapKeyExistsNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | 4 | class MapKeyExistsNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function run(from: Int) { 11 | var map: Map = inputs[1].get(); 12 | if (map == null) return null; 13 | 14 | var key: Dynamic = inputs[2].get(); 15 | 16 | if (map.exists(key)) { 17 | runOutput(0); 18 | return; 19 | } else { 20 | runOutput(1); 21 | return; 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/MaskNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class MaskNode extends LogicNode { 4 | 5 | public var value: Int; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var ret = 0; 13 | for (v in 0...20) { 14 | var bit: Bool = inputs[v].get(); 15 | if (bit) ret |= (1 << v); 16 | } 17 | return ret; 18 | } 19 | 20 | override function set(value: Dynamic) { 21 | this.value = value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/NoneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class NoneNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return null; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/NotNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class NotNode extends LogicNode { 4 | 5 | public var property0: String; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var v1: Bool = inputs[0].get(); 13 | return !v1; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/NullNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class NullNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { return null; } 10 | } 11 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/OnApplicationStateNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | @:access(iron.Trait) 4 | class OnApplicationStateNode extends LogicNode { 5 | 6 | public function new(tree: LogicTree) { 7 | super(tree); 8 | tree.notifyOnInit(init); 9 | } 10 | 11 | function init() { 12 | kha.System.notifyOnApplicationState( 13 | () -> runOutput(0), // On foreground 14 | null, // On resume 15 | null, // On pause 16 | () -> runOutput(1), // On background 17 | () -> runOutput(2) // On shutdown 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/OnRemoveNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class OnRemoveNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | tree.notifyOnRemove(onRemove); 8 | } 9 | 10 | function onRemove() { 11 | runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/OnRender2DNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import armory.renderpath.RenderToTexture; 4 | 5 | class OnRender2DNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | tree.notifyOnRender2D(onRender2D); 10 | } 11 | 12 | function onRender2D(g: kha.graphics2.Graphics) { 13 | RenderToTexture.ensureEmptyRenderTarget("OnRender2DNode"); 14 | RenderToTexture.g = g; 15 | runOutput(0); 16 | RenderToTexture.g = null; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/OncePerFrameNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class OncePerFrameNode extends LogicNode { 4 | 5 | var c = false; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | tree.notifyOnUpdate(update); 10 | } 11 | 12 | override function run(from: Int) { 13 | if(c) { 14 | c = false; 15 | runOutput(0); 16 | } 17 | } 18 | 19 | function update() { 20 | c = true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ParseFloatNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ParseFloatNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var s: String = inputs[0].get(); 11 | if (s == null) return null; 12 | 13 | return Std.parseFloat(s); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ParseIntNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ParseIntNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var s: String = inputs[0].get(); 11 | if (s == null) return null; 12 | 13 | return Std.parseInt(s); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ParseJsonNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | import haxe.Json; 3 | 4 | class ParseJsonNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function get(from: Int):Dynamic { 11 | return Json.parse(inputs[0].get()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PauseActionNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class PauseActionNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: Object = inputs[1].get(); 13 | 14 | if (object == null) return; 15 | var animation = object.animation; 16 | if (animation == null) animation = object.getParentArmature(object.name); 17 | 18 | animation.pause(); 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PauseActiveCameraRenderNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.RenderPath; 4 | 5 | class PauseActiveCameraRenderNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | final isPaused: Bool = inputs[1].get(); 13 | 14 | RenderPath.active.paused = isPaused; 15 | runOutput(0); 16 | } 17 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PauseSoundNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.SpeakerObject; 4 | 5 | class PauseSoundNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: SpeakerObject = cast(inputs[1].get(), SpeakerObject); 13 | if (object == null) return; 14 | object.pause(); 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PauseTilesheetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class PauseTilesheetNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: MeshObject = inputs[1].get(); 13 | 14 | if (object == null) return; 15 | 16 | object.activeTilesheet.pause(); 17 | 18 | runOutput(0); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PauseTraitNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class PauseTraitNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var trait: Dynamic = inputs[1].get(); 11 | if (trait == null || !Std.isOfType(trait, LogicTree)) return; 12 | 13 | cast(trait, LogicTree).pause(); 14 | 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PlaySoundNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.SpeakerObject; 4 | 5 | class PlaySoundNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: SpeakerObject = cast(inputs[1].get(), SpeakerObject); 13 | if (object == null) return; 14 | object.play(); 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PlayTilesheetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class PlayTilesheetNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: MeshObject = inputs[1].get(); 13 | var action: String = inputs[2].get(); 14 | 15 | if (object == null) return; 16 | 17 | object.activeTilesheet.play(action, function() { 18 | runOutput(1); 19 | }); 20 | 21 | runOutput(0); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PrintNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class PrintNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var value: Dynamic = inputs[1].get(); 11 | 12 | #if (arm_debug) 13 | trace(tree.name + ": " + value); 14 | #else 15 | trace(value); 16 | #end 17 | 18 | runOutput(0); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/PromptNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class PromptNode extends LogicNode { 4 | 5 | var input: String = null; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | #if kha_html5 13 | input = js.Browser.window.prompt(inputs[1].get(), inputs[2].get()); 14 | 15 | runOutput(0); 16 | #end 17 | 18 | } 19 | 20 | override function get(from: Int): Dynamic { 21 | return input; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RadToDegNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RadToDegNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var rad: Float = inputs[0].get(); 11 | return rad * 57.29578; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomBooleanNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RandomBooleanNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return Std.random(2) == 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomChoiceNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RandomChoiceNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var array: Array = inputs[0].get(); 11 | 12 | return array[Std.random(array.length)]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomColorNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.math.Vec4; 4 | 5 | class RandomColorNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | 13 | var r = Math.random(); 14 | var g = Math.random(); 15 | var b = Math.random(); 16 | // var a = Math.random(); 17 | var v = new Vec4(r, g, b); 18 | return v; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomFloatNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RandomFloatNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var min: Float = inputs[0].get(); 11 | var max: Float = inputs[1].get(); 12 | return min + (Math.random() * (max - min)); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomIntegerNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RandomIntegerNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var min: Int = inputs[0].get(); 11 | var max: Int = inputs[1].get(); 12 | return min + Std.random(max - min); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RandomOutputNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RandomOutputNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | runOutput(Std.random(outputs.length)); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RemoveActiveSceneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RemoveActiveSceneNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | iron.Scene.active.remove(); 11 | runOutput(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RemoveInputMapKeyNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import armory.system.InputMap; 4 | 5 | class RemoveInputMapKeyNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var inputMap = inputs[1].get(); 13 | var key = inputs[2].get(); 14 | 15 | if (InputMap.removeInputMapKey(inputMap, key)) { 16 | runOutput(0); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RemoveMapKeyNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | 4 | class RemoveMapKeyNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function run(from: Int) { 11 | var map: Map = inputs[1].get(); 12 | if (map == null) return; 13 | var key: Dynamic = inputs[2].get(); 14 | map.remove(key); 15 | runOutput(0); 16 | } 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RemoveObjectFromGroupNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class RemoveObjectFromGroupNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var groupName: String = inputs[1].get(); 13 | var object: Object = inputs[2].get(); 14 | 15 | iron.Scene.active.getGroup(groupName).remove(object); 16 | 17 | runOutput(0); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RemoveTraitNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RemoveTraitNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var trait: Dynamic = inputs[1].get(); 11 | if (trait == null) return; 12 | trait.remove(); 13 | 14 | runOutput(0); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ResumeActionNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class ResumeActionNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: Object = inputs[1].get(); 13 | 14 | if (object == null) return; 15 | var animation = object.animation; 16 | if (animation == null) animation = object.getParentArmature(object.name); 17 | 18 | animation.resume(); 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ResumeTilesheetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class ResumeTilesheetNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: MeshObject = inputs[1].get(); 13 | 14 | if (object == null) return; 15 | 16 | object.activeTilesheet.resume(); 17 | 18 | runOutput(0); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ResumeTraitNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ResumeTraitNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var trait: Dynamic = inputs[1].get(); 11 | if (trait == null || !Std.isOfType(trait, LogicTree)) return; 12 | 13 | cast(trait, LogicTree).resume(); 14 | 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/RetainValueNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class RetainValueNode extends LogicNode { 4 | 5 | var value: Dynamic = null; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | value = inputs[1].get(); 13 | 14 | runOutput(0); 15 | } 16 | 17 | override function get(from:Int):Dynamic { 18 | return value; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SSAOGetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SSAOGetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from:Int):Dynamic { 10 | 11 | return switch (from) { 12 | case 0: armory.renderpath.Postprocess.ssao_uniforms[0]; 13 | case 1: armory.renderpath.Postprocess.ssao_uniforms[1]; 14 | case 2: armory.renderpath.Postprocess.ssao_uniforms[2]; 15 | default: 0.0; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SSAOSetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SSAOSetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from:Int) { 10 | 11 | armory.renderpath.Postprocess.ssao_uniforms[0] = inputs[1].get(); 12 | armory.renderpath.Postprocess.ssao_uniforms[1] = inputs[2].get(); 13 | armory.renderpath.Postprocess.ssao_uniforms[2] = inputs[3].get(); 14 | 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SceneNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SceneNode extends LogicNode { 4 | 5 | public var property0: String; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | return property0; 13 | } 14 | 15 | override function set(value: Dynamic) { 16 | this.property0 = value; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SceneRootNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SceneRootNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return iron.Scene.active.root; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SelectOutputNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SelectOutputNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | //Get index to run 11 | var outIndex: Int = inputs[1].get(); 12 | // Check if output index found 13 | if(outIndex > (outputs.length - 2) || outIndex < 0) 14 | { 15 | runOutput(0); 16 | return; 17 | } 18 | runOutput(outIndex + 1); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SelfNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SelfNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return tree.object; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SelfTraitNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SelfTraitNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | return tree; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SendGlobalEventNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import armory.system.Event; 4 | 5 | class SendGlobalEventNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | final name: String = inputs[1].get(); 13 | final entries = Event.get(name); 14 | 15 | if (entries != null) { 16 | for (e in entries) e.onEvent(); 17 | } 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SeparateVectorNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.math.Vec4; 4 | 5 | class SeparateVectorNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function get(from: Int): Dynamic { 12 | var vector: Vec4 = inputs[0].get(); 13 | if (vector == null) return 0.0; 14 | 15 | if (from == 0) return vector.x; 16 | else if (from == 1) return vector.y; 17 | else return vector.z; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SequenceNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SequenceNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | for (i in 0...outputs.length) runOutput(i); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetCameraAspectNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class SetCameraAspectNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var camera: CameraObject = inputs[1].get(); 13 | var aspect: Float = inputs[2].get(); 14 | 15 | if (camera == null) return; 16 | 17 | camera.data.raw.aspect = aspect; 18 | camera.buildProjection(); 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetCameraFovNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class SetCameraFovNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var camera: CameraObject = inputs[1].get(); 13 | var fov: Float = inputs[2].get(); 14 | 15 | if (camera == null) return; 16 | 17 | camera.data.raw.fov = fov; 18 | camera.buildProjection(); 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetCameraNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.CameraObject; 4 | 5 | class SetCameraNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var camera: CameraObject = inputs[1].get(); 13 | if (camera == null) return; 14 | camera.buildProjection(); 15 | 16 | iron.Scene.active.camera = camera; 17 | 18 | runOutput(0); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetGlobalCanvasVisibilityNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import armory.trait.internal.CanvasScript; 4 | 5 | class SetGlobalCanvasVisibilityNode extends LogicNode { 6 | 7 | public function new(tree:LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | #if arm_ui 13 | var value: Bool = inputs[1].get(); 14 | CanvasScript.getActiveCanvas().setCanvasVisible(value); 15 | #end 16 | 17 | runOutput(0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetGravityNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.math.Vec4; 4 | 5 | class SetGravityNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var gravity: Vec4 = inputs[1].get(); 13 | 14 | if (gravity == null) return; 15 | 16 | #if arm_physics 17 | var physics = armory.trait.physics.PhysicsWorld.active; 18 | physics.setGravity(gravity); 19 | #end 20 | 21 | runOutput(0); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetHaxePropertyNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetHaxePropertyNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var object: Dynamic = inputs[1].get(); 11 | var property: String = inputs[2].get(); 12 | var value: Dynamic = inputs[3].get(); 13 | 14 | if (object == null) return; 15 | 16 | Reflect.setProperty(object, property, value); 17 | 18 | runOutput(0); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetMapValueNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | 4 | class SetMapValueNode extends LogicNode { 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function run(from:Int) { 11 | var map: Map = inputs[1].get(); 12 | if (map == null) return null; 13 | var key: Dynamic = inputs[2].get(); 14 | var value: Dynamic = inputs[3].get(); 15 | map[key] = value; 16 | runOutput(0); 17 | return; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetMeshNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | import iron.data.MeshData; 5 | 6 | class SetMeshNode extends LogicNode { 7 | 8 | public function new(tree: LogicTree) { 9 | super(tree); 10 | } 11 | 12 | override function run(from: Int) { 13 | var object: MeshObject = inputs[1].get(); 14 | var mesh: MeshData = inputs[2].get(); 15 | 16 | if (object == null) return; 17 | 18 | object.data = mesh; 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetMouseLockNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetMouseLockNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var lock: Bool = inputs[1].get(); 11 | var mouse = iron.system.Input.getMouse(); 12 | lock ? mouse.lock() : mouse.unlock(); 13 | runOutput(0); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetParticleRenderEmitterNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class SetParticleRenderEmitterNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | #if arm_particles 13 | var object: Object = inputs[1].get(); 14 | 15 | if (object == null) return; 16 | 17 | cast(object, iron.object.MeshObject).render_emitter = inputs[2].get(); 18 | 19 | #end 20 | 21 | runOutput(0); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetSoundNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.SpeakerObject; 4 | 5 | class SetSoundNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: SpeakerObject = cast(inputs[1].get(), SpeakerObject); 13 | var sound: String = inputs[2].get(); 14 | if (object == null || sound == null) return; 15 | object.setSound(sound); 16 | runOutput(0); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetSpotLightBlendNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.LightObject; 4 | 5 | class SetSpotLightBlendNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var light: LightObject = inputs[1].get(); 13 | var blend: Float = inputs[2].get(); 14 | 15 | if (light == null) return; 16 | 17 | light.data.raw.spot_blend = blend; 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetSpotLightSizeNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.LightObject; 4 | 5 | class SetSpotLightSizeNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var light: LightObject = inputs[1].get(); 13 | var size: Float = inputs[2].get(); 14 | 15 | if (light == null) return; 16 | 17 | light.data.raw.spot_size = size; 18 | 19 | runOutput(0); 20 | } 21 | } -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetTilesheetFrameNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class SetTilesheetFrameNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: MeshObject = inputs[1].get(); 13 | var frame: Int = inputs[2].get(); 14 | 15 | if (object == null) return; 16 | 17 | object.activeTilesheet.setFrameOffset(frame); 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetTilesheetPausedNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.MeshObject; 4 | 5 | class SetTilesheetPausedNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: MeshObject = inputs[1].get(); 13 | var paused: Bool = inputs[2].get(); 14 | 15 | if (object == null) return; 16 | 17 | paused ? object.activeTilesheet.pause() : object.activeTilesheet.resume(); 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetTimeScaleNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetTimeScaleNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var f: Float = inputs[1].get(); 11 | iron.system.Time.scale = f; 12 | runOutput(0); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetTraitPausedNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetTraitPausedNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var trait: Dynamic = inputs[1].get(); 11 | var paused: Bool = inputs[2].get(); 12 | 13 | if (trait == null || !Std.isOfType(trait, LogicTree)) return; 14 | 15 | paused ? cast(trait, LogicTree).pause() : cast(trait, LogicTree).resume(); 16 | 17 | runOutput(0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetVariableNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetVariableNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var variable = inputs[1]; 11 | var value: Dynamic = inputs[2].get(); 12 | 13 | variable.set(value); 14 | 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetVibrateNode.hx: -------------------------------------------------------------------------------- 1 | // Pulses the vibration hardware on the device for time in milliseconds, if such hardware exists. 2 | 3 | package armory.logicnode; 4 | import kha.System; 5 | 6 | class SetVibrateNode extends LogicNode { 7 | 8 | public function new(tree: LogicTree) { 9 | super(tree); 10 | } 11 | 12 | override function run(from: Int) { 13 | if (inputs[1].get() > 0) System.vibrate(inputs[1].get()); 14 | runOutput(0); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetVolumeSoundNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.SpeakerObject; 4 | 5 | class SetVolumeSoundNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: SpeakerObject = cast(inputs[1].get(), SpeakerObject); 13 | if (object == null) return; 14 | object.setVolume(inputs[2].get()); 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SetWorldStrengthNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SetWorldStrengthNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | 11 | iron.Scene.active.world.raw.probe.strength = inputs[1].get(); 12 | 13 | runOutput(0); 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SharpenGetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SharpenGetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from:Int):Dynamic { 10 | return switch (from) { 11 | case 0: armory.renderpath.Postprocess.sharpen_uniforms[0]; 12 | case 1: armory.renderpath.Postprocess.sharpen_uniforms[1][0]; 13 | case 2: armory.renderpath.Postprocess.camera_uniforms[12]; 14 | default: 0.0; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ShowMouseNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ShowMouseNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var show: Bool = inputs[1].get(); 11 | var mouse = iron.system.Input.getMouse(); 12 | show ? mouse.show() : mouse.hide(); 13 | runOutput(0); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ShutdownNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ShutdownNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | kha.System.stop(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SplitStringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SplitStringNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var s1: String = inputs[0].get(); 11 | var s2: String = inputs[1].get(); 12 | if (s1 == null || s2 == null) return null; 13 | 14 | return s1.split(s2); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/StopAgentNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.Object; 4 | 5 | class StopAgentNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: Object = inputs[1].get(); 13 | 14 | if (object == null) return; 15 | 16 | #if arm_navigation 17 | var agent: armory.trait.NavAgent = object.getTrait(armory.trait.NavAgent); 18 | agent.stop(); 19 | #end 20 | 21 | runOutput(0); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/StopSoundNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | import iron.object.SpeakerObject; 4 | 5 | class StopSoundNode extends LogicNode { 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | var object: SpeakerObject = cast(inputs[1].get(), SpeakerObject); 13 | if (object == null) return; 14 | object.stop(); 15 | runOutput(0); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/StringCharAtNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class StringCharAtNode extends LogicNode { 4 | public var char: String; 5 | 6 | public function new(tree:LogicTree) { 7 | super(tree); 8 | } 9 | 10 | override function run(from:Int) { 11 | var string: String = inputs[1].get(); 12 | var index: Int = inputs[2].get(); 13 | char = string.charAt(index); 14 | runOutput(0); 15 | } 16 | 17 | override function get(from: Int): String { 18 | return char; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/StringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class StringNode extends LogicNode { 4 | 5 | public var value: String; 6 | 7 | public function new(tree: LogicTree, value = "") { 8 | super(tree); 9 | this.value = value; 10 | } 11 | 12 | override function get(from: Int): Dynamic { 13 | if (inputs.length > 0) return inputs[0].get(); 14 | return value; 15 | } 16 | 17 | override function set(value: Dynamic) { 18 | if (inputs.length > 0) inputs[0].set(value); 19 | else this.value = value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/StringReplaceNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class StringReplaceNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var string: String = inputs[0].get(); 11 | var find: String = inputs[1].get(); 12 | var replace: String = inputs[2].get(); 13 | if (find == null || replace == null || string == null) return null; 14 | 15 | return StringTools.replace(string, find, replace); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SubStringNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SubStringNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | var string: String = inputs[0].get(); 11 | var start: Int = inputs[1].get(); 12 | var end: Int = inputs[2].get(); 13 | if (string == null) return null; 14 | 15 | return string.substring(start, end); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/SwitchNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class SwitchNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var v1: Dynamic = inputs[1].get(); 11 | if (inputs.length > 2) { 12 | for (i in 2...inputs.length) { 13 | if (inputs[i].get() == v1) { 14 | runOutput(i - 1); 15 | return; 16 | } 17 | } 18 | } 19 | 20 | runOutput(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/TimeNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class TimeNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | if (from == 0) return iron.system.Time.time(); 11 | else return iron.system.Time.delta; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/ToBoolNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class ToBoolNode extends LogicNode { 4 | 5 | var value: Bool; 6 | var b = false; 7 | 8 | public function new(tree: LogicTree) { 9 | super(tree); 10 | } 11 | 12 | override function run(from: Int) { 13 | b = true; 14 | } 15 | 16 | override function get(from: Int): Dynamic { 17 | value = b; 18 | b = false; 19 | return value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/VolumetricFogGetNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class VolumetricFogGetNode extends LogicNode { 4 | 5 | public function new(tree:LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from:Int):Dynamic { 10 | return switch (from) { 11 | case 0: armory.renderpath.Postprocess.volumetric_fog_uniforms[0]; 12 | case 1: armory.renderpath.Postprocess.volumetric_fog_uniforms[1][0]; 13 | case 2: armory.renderpath.Postprocess.volumetric_fog_uniforms[2][0]; 14 | default: 0.0; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/WaitForNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class WaitForNode extends LogicNode { 4 | 5 | var froms: Array = []; 6 | 7 | public function new(tree: LogicTree) { 8 | super(tree); 9 | } 10 | 11 | override function run(from: Int) { 12 | 13 | if(!froms.contains(from)) froms.push(from); 14 | if(inputs.length == froms.length){ runOutput(0); froms = []; } 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/WindowInfoNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class WindowInfoNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function get(from: Int): Dynamic { 10 | if (from == 0) return kha.System.windowWidth(); 11 | else return kha.System.windowHeight(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /armory/Sources/armory/logicnode/WriteStorageNode.hx: -------------------------------------------------------------------------------- 1 | package armory.logicnode; 2 | 3 | class WriteStorageNode extends LogicNode { 4 | 5 | public function new(tree: LogicTree) { 6 | super(tree); 7 | } 8 | 9 | override function run(from: Int) { 10 | var key: String = inputs[1].get(); 11 | var value: Dynamic = inputs[2].get(); 12 | 13 | var data = iron.system.Storage.data; 14 | if (data == null) return; 15 | 16 | Reflect.setField(data, key, value); 17 | iron.system.Storage.save(); 18 | 19 | runOutput(0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/Handler.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | class Handler extends WebSocketCommon { 4 | public function new(socket:SocketImpl) { 5 | super(socket); 6 | isClient = false; 7 | } 8 | 9 | public function handle() { 10 | process(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/OpCode.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | @:enum abstract OpCode(Int) { 4 | var Continuation = 0x00; 5 | var Text = 0x01; 6 | var Binary = 0x02; 7 | var Close = 0x08; 8 | var Ping = 0x09; 9 | var Pong = 0x0A; 10 | 11 | @:to public function toInt() { 12 | return this; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/SecureSocketImpl.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | typedef SecureSocketImpl = sys.ssl.Socket; 4 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/SocketImpl.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | #if java 4 | 5 | typedef SocketImpl = armory.network.java.NioSocket; 6 | 7 | #elseif cs 8 | 9 | typedef SocketImpl = armory.network.cs.NonBlockingSocket; 10 | 11 | #elseif nodejs 12 | 13 | typedef SocketImpl = armory.network.nodejs.NodeSocket; 14 | 15 | #else 16 | 17 | typedef SocketImpl = sys.net.Socket; 18 | 19 | #end 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/State.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | enum State { 4 | Handshake; 5 | Head; 6 | HeadExtraLength; 7 | HeadExtraMask; 8 | Body; 9 | Closed; 10 | } 11 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/Types.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | import haxe.io.Bytes; 4 | 5 | #if js 6 | typedef BinaryType = js.html.BinaryType; 7 | #else 8 | 9 | @:enum abstract BinaryType(String) { 10 | var ARRAYBUFFER = "arraybuffer"; 11 | 12 | @:to public function toString() { 13 | return this; 14 | } 15 | } 16 | 17 | #end 18 | 19 | enum MessageType { 20 | BytesMessage(content: Buffer); 21 | StrMessage(content: String); 22 | } 23 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/Utf8Encoder.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | import haxe.io.Bytes; 4 | 5 | class Utf8Encoder { 6 | static public function encode(str:String):Bytes { 7 | // @TODO: Proper utf8 encoding! 8 | return Bytes.ofString(str); 9 | } 10 | 11 | static public function decode(data:Bytes):String { 12 | // @TODO: Proper utf8 decoding! 13 | return data.toString(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /armory/Sources/armory/network/Util.hx: -------------------------------------------------------------------------------- 1 | package armory.network; 2 | 3 | import armory.network.uuid.Uuid; 4 | 5 | class Util { 6 | public static function generateUUID():String { 7 | return Uuid.v1(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /armory/Sources/armory/trait/internal/LoadingScreen.hx: -------------------------------------------------------------------------------- 1 | package armory.trait.internal; 2 | 3 | // To create a custom loading screen copy this file to blend_root/Sources/arm/LoadingScreen.hx 4 | 5 | class LoadingScreen { 6 | 7 | public static function render(g: kha.graphics2.Graphics, assetsLoaded: Int, assetsTotal: Int) { 8 | g.color = 0xffcf2b43; 9 | g.fillRect(0, iron.App.h() - 6, iron.App.w() / assetsTotal * assetsLoaded, 6); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /armory/Sources/armory/trait/physics/KinematicCharacterController.hx: -------------------------------------------------------------------------------- 1 | package armory.trait.physics; 2 | 3 | #if (!arm_physics) 4 | 5 | class KinematicCharacterController extends iron.Trait { public function new() { super(); } } 6 | 7 | #else 8 | 9 | #if arm_bullet 10 | 11 | typedef KinematicCharacterController = armory.trait.physics.bullet.KinematicCharacterController; 12 | 13 | #else 14 | 15 | typedef KinematicCharacterController = armory.trait.physics.oimo.KinematicCharacterController; 16 | 17 | #end 18 | 19 | #end 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/trait/physics/PhysicsHook.hx: -------------------------------------------------------------------------------- 1 | package armory.trait.physics; 2 | 3 | #if (!arm_physics) 4 | 5 | class PhysicsHook extends iron.Trait { public function new() { super(); } } 6 | 7 | #else 8 | 9 | #if arm_bullet 10 | 11 | typedef PhysicsHook = armory.trait.physics.bullet.PhysicsHook; 12 | 13 | #else 14 | 15 | typedef PhysicsHook = armory.trait.physics.oimo.PhysicsHook; 16 | 17 | #end 18 | 19 | #end 20 | -------------------------------------------------------------------------------- /armory/Sources/armory/trait/physics/SoftBody.hx: -------------------------------------------------------------------------------- 1 | package armory.trait.physics; 2 | 3 | #if (!arm_physics_soft) 4 | 5 | class SoftBody extends Trait { public function new() { super(); } } 6 | 7 | #else 8 | 9 | #if arm_bullet 10 | 11 | typedef SoftBody = armory.trait.physics.bullet.SoftBody; 12 | 13 | #else 14 | 15 | typedef SoftBody = armory.trait.physics.oimo.SoftBody; 16 | 17 | #end 18 | 19 | #end 20 | -------------------------------------------------------------------------------- /armory/Sources/iron/object/Clipmap.hx: -------------------------------------------------------------------------------- 1 | package iron.object; 2 | 3 | class Clipmap { 4 | public var voxelSize = 0.125; 5 | public var extents:iron.math.Vec3; 6 | public var center:iron.math.Vec3; 7 | public var offset_prev:iron.math.Vec3; 8 | 9 | public function new() {}; 10 | } 11 | -------------------------------------------------------------------------------- /armory/Sources/zui/Id.hx: -------------------------------------------------------------------------------- 1 | package zui; 2 | 3 | import haxe.macro.Context; 4 | import haxe.macro.Expr; 5 | import haxe.macro.ExprTools; 6 | 7 | class Id { 8 | 9 | static var i = 0; 10 | 11 | macro public static function pos(): Expr { 12 | return macro $v{i++}; 13 | } 14 | 15 | macro public static function handle(ops: Expr = null): Expr { 16 | var code = "zui.Zui.Handle.global.nest(zui.Id.pos()," + ExprTools.toString(ops) + ")"; 17 | return Context.parse(code, Context.currentPos()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /armory/blender/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/custom_icons/bundle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/custom_icons/bundle.png -------------------------------------------------------------------------------- /armory/blender/arm/custom_icons/haxe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/custom_icons/haxe.png -------------------------------------------------------------------------------- /armory/blender/arm/custom_icons/wasm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/custom_icons/wasm.png -------------------------------------------------------------------------------- /armory/blender/arm/lib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lib/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = ('Operators', 'Panels', 'Properties', 'Preferences', 'Utility', 'Keymap') -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/TLM_Overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/TLM_Overlay.png -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/dash.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/dash.ogg -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/gentle.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/gentle.ogg -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/noot.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/noot.ogg -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/pingping.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/pingping.ogg -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/sound.ogg -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/assets/tlm_data.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/assets/tlm_data.blend -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/icons/bake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/icons/bake.png -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/icons/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/icons/clean.png -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/icons/explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/icons/explore.png -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/keymap/__init__.py: -------------------------------------------------------------------------------- 1 | from . import keymap 2 | 3 | def register(): 4 | keymap.register() 5 | 6 | def unregister(): 7 | keymap.unregister() -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/panels/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/panels/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/preferences/__init__.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | from bpy.utils import register_class, unregister_class 3 | from . import addon_preferences 4 | #from . import build, clean, explore, encode, installopencv 5 | 6 | classes = [ 7 | addon_preferences.TLM_AddonPreferences 8 | ] 9 | 10 | def register(): 11 | for cls in classes: 12 | register_class(cls) 13 | 14 | def unregister(): 15 | for cls in classes: 16 | unregister_class(cls) -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/properties/denoiser/integrated.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | from bpy.props import * 3 | 4 | class TLM_IntegratedDenoiseEngineProperties(bpy.types.PropertyGroup): -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/properties/filtering.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | from bpy.props import * 3 | 4 | class TLM_FilteringProperties(bpy.types.PropertyGroup): -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/properties/renderer/luxcorerender.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | from bpy.props import * 3 | 4 | class TLM_LuxCoreSceneProperties(bpy.types.PropertyGroup): 5 | 6 | #Luxcore specific here 7 | tlm_luxcore_dir : StringProperty( 8 | name="Luxcore Directory", 9 | description="Standalone path to your LuxCoreRender binary.", 10 | default="", 11 | subtype="FILE_PATH") -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/properties/renderer/octanerender.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | from bpy.props import * 3 | 4 | class TLM_OctanerenderSceneProperties(bpy.types.PropertyGroup): 5 | 6 | tlm_lightmap_savedir : StringProperty( 7 | name="Lightmap Directory", 8 | description="TODO", 9 | default="Lightmaps", 10 | subtype="FILE_PATH") -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/properties/renderer/radeonrays.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/properties/renderer/radeonrays.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/utility/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/utility/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/utility/cycles/ao.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/utility/cycles/ao.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/utility/cycles/indirect.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/lightmapper/utility/cycles/indirect.py -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/utility/log.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | import datetime 3 | 4 | class TLM_Logman: 5 | 6 | _log = [] 7 | 8 | def __init__(self): 9 | print("Logger started Init") 10 | self.append("Logger started.") 11 | 12 | def append(self, appended): 13 | self._log.append(str(datetime.datetime.now()) + ": " + str(appended)) 14 | 15 | #TODO! 16 | def stats(): 17 | pass 18 | 19 | def dumpLog(self): 20 | for line in self._log: 21 | print(line) -------------------------------------------------------------------------------- /armory/blender/arm/lightmapper/utility/preconfiguration/object.py: -------------------------------------------------------------------------------- 1 | import bpy, os, re, sys 2 | 3 | def prepare(obj): 4 | print("Preparing: " + obj.name) 5 | pass -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/animation/LN_action.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class AnimActionNode(ArmLogicTreeNode): 4 | """Stores the given action as a variable.""" 5 | bl_idname = 'LNAnimActionNode' 6 | bl_label = 'Action' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAnimAction', 'Action') 11 | 12 | self.add_output('ArmNodeSocketAnimAction', 'Action', is_var=True) 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/animation/LN_get_bone_transform.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetBoneTransformNode(ArmLogicTreeNode): 4 | """Returns bone transform in world space.""" 5 | bl_idname = 'LNGetBoneTransformNode' 6 | bl_label = 'Get Bone Transform' 7 | arm_version = 1 8 | arm_section = 'armature' 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | self.add_input('ArmStringSocket', 'Bone') 13 | self.add_output('ArmDynamicSocket', 'Transform') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/animation/LN_on_action_marker.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class OnActionMarkerNode(ArmLogicTreeNode): 4 | """Activates the output when the object action reaches the action marker.""" 5 | bl_idname = 'LNOnActionMarkerNode' 6 | bl_label = 'On Action Marker' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Object') 11 | self.add_input('ArmStringSocket', 'Marker') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/animation/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Animation') 4 | add_node_section(name='tilesheet', category='Animation') 5 | add_node_section(name='armature', category='Animation') 6 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_compare.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayCompareNode(ArmLogicTreeNode): 4 | """Compare arrays.""" 5 | 6 | bl_idname = 'LNArrayCompareNode' 7 | bl_label = 'Array Compare' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketArray', 'Array') 12 | self.add_input('ArmNodeSocketArray', 'Array') 13 | 14 | self.add_output('ArmBoolSocket', 'Compare') 15 | 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_concat.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayConcatNode(ArmLogicTreeNode): 4 | """Join arrays.""" 5 | 6 | bl_idname = 'LNArrayConcatNode' 7 | bl_label = 'Array Concat' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketArray', 'Array') 12 | self.add_input('ArmNodeSocketArray', 'Array') 13 | 14 | self.add_output('ArmNodeSocketArray', 'Array') 15 | self.add_output('ArmIntSocket', 'Length') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_contains.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayContainsNode(ArmLogicTreeNode): 4 | """Returns whether the given array contains the given value.""" 5 | bl_idname = 'LNArrayInArrayNode' 6 | bl_label = 'Array Contains' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | self.add_input('ArmDynamicSocket', 'Value') 12 | 13 | self.add_output('ArmBoolSocket', 'Contains') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_count.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayCountNode(ArmLogicTreeNode): 4 | """Returns an array with the item counts of the given array.""" 5 | bl_idname = 'LNArrayCountNode' 6 | bl_label = 'Array Count' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | 12 | self.add_output('ArmNodeSocketArray', 'Count') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_distinct.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayDistinctNode(ArmLogicTreeNode): 4 | """Returns the Distinct and Duplicated items of the given array.""" 5 | bl_idname = 'LNArrayDistinctNode' 6 | bl_label = 'Array Distinct' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | 12 | self.add_output('ArmNodeSocketArray', 'Distinct') 13 | self.add_output('ArmNodeSocketArray', 'Duplicated') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_get.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayGetNode(ArmLogicTreeNode): 4 | """Returns the value of the given array at the given index.""" 5 | bl_idname = 'LNArrayGetNode' 6 | bl_label = 'Array Get' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | self.add_input('ArmIntSocket', 'Index') 12 | 13 | self.add_output('ArmDynamicSocket', 'Value') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_get_next.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayGetNextNode(ArmLogicTreeNode): 4 | """Returns the next value to be retrieve by looping the array.""" 5 | bl_idname = 'LNArrayGetNextNode' 6 | bl_label = 'Array Get Next' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | 12 | self.add_output('ArmDynamicSocket', 'Value') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_index_list.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayIndexNode(ArmLogicTreeNode): 4 | """Returns the array index list of the given value as an array.""" 5 | bl_idname = 'LNArrayIndexListNode' 6 | bl_label = 'Array Index List' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | self.add_input('ArmDynamicSocket', 'Value') 12 | 13 | self.add_output('ArmNodeSocketArray', 'Array') -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_length.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayLengthNode(ArmLogicTreeNode): 4 | """Returns the length of the given array.""" 5 | bl_idname = 'LNArrayLengthNode' 6 | bl_label = 'Array Length' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketArray', 'Array') 11 | 12 | self.add_output('ArmIntSocket', 'Length') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_pop.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayPopNode(ArmLogicTreeNode): 4 | """Removes the last element of the given array. 5 | 6 | @see [Haxe API](https://api.haxe.org/Array.html#pop)""" 7 | bl_idname = 'LNArrayPopNode' 8 | bl_label = 'Array Pop' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmNodeSocketArray', 'Array') 13 | 14 | self.add_output('ArmDynamicSocket', 'Value') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_reverse.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayReverseNode(ArmLogicTreeNode): 4 | """Reverse the items order of the array.""" 5 | 6 | bl_idname = 'LNArrayReverseNode' 7 | bl_label = 'Array Reverse' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketArray', 'Array') 12 | 13 | self.add_output('ArmNodeSocketArray', 'Array') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_shift.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayShiftNode(ArmLogicTreeNode): 4 | """Removes the first element of the given array. 5 | 6 | @see [Haxe API](https://api.haxe.org/Array.html#shift)""" 7 | bl_idname = 'LNArrayShiftNode' 8 | bl_label = 'Array Shift' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmNodeSocketArray', 'Array') 13 | 14 | self.add_output('ArmDynamicSocket', 'Value') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_shuffle.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArrayShuffleNode(ArmLogicTreeNode): 4 | """Shuffle the items in the array and return a new array 5 | """ 6 | bl_idname = 'LNArrayShuffleNode' 7 | bl_label = 'Array Shuffle' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketArray', 'Array') 12 | 13 | self.add_output('ArmNodeSocketArray', 'Array') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/LN_array_sort.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ArraySortNode(ArmLogicTreeNode): 4 | """Sort the items order of the array by ascending or descending.""" 5 | 6 | bl_idname = 'LNArraySortNode' 7 | bl_label = 'Array Sort' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketArray', 'Array') 12 | self.add_input('ArmBoolSocket', 'Descending', default_value=False) 13 | 14 | self.add_output('ArmNodeSocketArray', 'Array') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/array/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='variable', category='Array') 4 | add_node_section(name='default', category='Array') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/browser/LN_detect_mobile_browser.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class DetectMobileBrowserNode(ArmLogicTreeNode): 4 | """Determines the mobile browser or not (works only for web browsers).""" 5 | bl_idname = 'LNDetectMobileBrowserNode' 6 | bl_label = 'Detect Mobile Browser' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmBoolSocket', 'Mobile') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/browser/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Browser') 4 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_get_camera_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ActiveCameraNode(ArmLogicTreeNode): 4 | """Returns the active camera. 5 | 6 | @seeNode Set Active Camera""" 7 | bl_idname = 'LNActiveCameraNode' 8 | bl_label = 'Get Camera Active' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_output('ArmNodeSocketObject', 'Camera') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_get_camera_aspect.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetCameraAspectNode(ArmLogicTreeNode): 4 | """Returns the aspect of the given camera.""" 5 | bl_idname = 'LNGetCameraAspectNode' 6 | bl_label = 'Get Camera Aspect' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Camera') 11 | 12 | self.add_output('ArmFloatSocket', 'Aspect') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_get_camera_fov.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetCameraFovNode(ArmLogicTreeNode): 4 | """Returns the field of view (FOV) of the given camera. 5 | 6 | @seeNode Set Camera FOV""" 7 | bl_idname = 'LNGetCameraFovNode' 8 | bl_label = 'Get Camera FOV' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmNodeSocketObject', 'Object') 13 | 14 | self.add_output('ArmFloatSocket', 'FOV') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_get_camera_scale.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetCameraScaleNode(ArmLogicTreeNode): 4 | """Returns the scale of the given camera.""" 5 | bl_idname = 'LNGetCameraScaleNode' 6 | bl_label = 'Get Camera Ortho Scale' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Camera') 11 | 12 | self.add_output('ArmFloatSocket', 'Ortho Scale') 13 | 2 -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_get_camera_type.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetCameraTypeNode(ArmLogicTreeNode): 4 | """Returns the camera Type: 5 | 0 : Perspective 6 | 1 : Ortographic 7 | .""" 8 | bl_idname = 'LNGetCameraTypeNode' 9 | bl_label = 'Get Camera Type' 10 | arm_version = 1 11 | 12 | def arm_init(self, context): 13 | self.add_input('ArmNodeSocketObject', 'Camera') 14 | 15 | self.add_output('ArmBoolSocket', 'Type') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/LN_set_camera_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SetCameraNode(ArmLogicTreeNode): 4 | """Sets the active camera. 5 | 6 | @seeNode Get Active Camera""" 7 | bl_idname = 'LNSetCameraNode' 8 | bl_label = 'Set Camera Active' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmNodeSocketAction', 'In') 13 | self.add_input('ArmNodeSocketObject', 'Camera') 14 | 15 | self.add_output('ArmNodeSocketAction', 'Out') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/camera/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/camera/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_checkbox.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetCheckboxNode(ArmLogicTreeNode): 5 | """Returns whether the given UI checkbox is checked.""" 6 | bl_idname = 'LNCanvasGetCheckboxNode' 7 | bl_label = 'Get Canvas Checkbox' 8 | arm_section = 'elements_specific' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmStringSocket', 'Element') 13 | 14 | self.add_output('ArmBoolSocket', 'Is Checked') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_input_text.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetInputTextNode(ArmLogicTreeNode): 5 | """Returns the input text of the given UI element.""" 6 | bl_idname = 'LNCanvasGetInputTextNode' 7 | bl_label = 'Get Canvas Input Text' 8 | arm_section = 'elements_specific' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmStringSocket', 'Element') 13 | 14 | self.add_output('ArmStringSocket', 'Text') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_position.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetPositionNode(ArmLogicTreeNode): 5 | """TO DO.""" 6 | bl_idname = 'LNCanvasGetPositionNode' 7 | bl_label = 'Get Canvas Position' 8 | arm_section = 'elements_general' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmStringSocket', 'Element') 13 | 14 | self.add_output('ArmIntSocket', 'Position') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_slider.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetSliderNode(ArmLogicTreeNode): 5 | """Returns the value of the given UI slider.""" 6 | bl_idname = 'LNCanvasGetSliderNode' 7 | bl_label = 'Get Canvas Slider' 8 | arm_section = 'elements_specific' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmStringSocket', 'Element') 13 | 14 | self.add_output('ArmFloatSocket', 'Float') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_text.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetTextNode(ArmLogicTreeNode): 5 | """Sets the text of the given UI element.""" 6 | bl_idname = 'LNCanvasGetTextNode' 7 | bl_label = 'Get Canvas Text' 8 | arm_section = 'elements_general' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmStringSocket', 'Element') 13 | 14 | self.add_output('ArmStringSocket', 'String') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_canvas_visible.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class CanvasGetVisibleNode(ArmLogicTreeNode): 5 | """Returns whether the given UI element is visible.""" 6 | bl_idname = 'LNCanvasGetVisibleNode' 7 | bl_label = 'Get Canvas Visible' 8 | arm_section = 'elements_general' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.inputs.new('ArmStringSocket', 'Element') 13 | 14 | self.outputs.new('ArmBoolSocket', 'Is Visible') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_global_canvas_font_size.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class GetGlobalCanvasFontSizeNode(ArmLogicTreeNode): 5 | """Returns the font size of the entire UI Canvas.""" 6 | bl_idname = 'LNGetGlobalCanvasFontSizeNode' 7 | bl_label = 'Get Global Canvas Font Size' 8 | arm_section = 'global' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_output('ArmFloatSocket', 'Size') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/LN_get_global_canvas_scale.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class GetGlobalCanvasScaleNode(ArmLogicTreeNode): 5 | """Returns the scale of the entire UI Canvas.""" 6 | bl_idname = 'LNGetGlobalCanvasScaleNode' 7 | bl_label = 'Get Global Canvas Scale' 8 | arm_section = 'global' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_output('ArmFloatSocket', 'Scale') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/canvas/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='events', category='Canvas') 4 | add_node_section(name='elements_general', category='Canvas') 5 | add_node_section(name='elements_specific', category='Canvas') 6 | add_node_section(name='global', category='Canvas') 7 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/deprecated/__init__.py: -------------------------------------------------------------------------------- 1 | """dummy file to include the code fro the deprecated nodes""" 2 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/draw/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='draw') -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/event/LN_on_init.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class OnInitNode(ArmLogicTreeNode): 4 | """Activates the output on the first frame of execution of the logic tree.""" 5 | bl_idname = 'LNOnInitNode' 6 | bl_label = 'On Init' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmNodeSocketAction', 'Out') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/event/LN_on_remove.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class OnRemoveNode(ArmLogicTreeNode): 4 | """Activates the output when logic tree is removed""" 5 | bl_idname = 'LNOnRemoveNode' 6 | bl_label = 'On Remove' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmNodeSocketAction', 'Out') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/event/LN_on_render2d.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class OnRender2DNode(ArmLogicTreeNode): 5 | """Registers a 2D rendering callback to activate its output on each 6 | frame after the frame has been drawn and other non-2D render callbacks 7 | have been executed. 8 | """ 9 | bl_idname = 'LNOnRender2DNode' 10 | bl_label = 'On Render2D' 11 | arm_version = 1 12 | 13 | def arm_init(self, context): 14 | self.add_output('ArmNodeSocketAction', 'Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/event/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Event') 4 | add_node_section(name='custom', category='Event') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/input/LN_get_gamepad_started.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetGamepadStartedNode(ArmLogicTreeNode): 4 | """.""" 5 | bl_idname = 'LNGetGamepadStartedNode' 6 | bl_label = 'Get Gamepad Started' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmIntSocket', 'Index') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | self.add_output('ArmStringSocket', 'Button') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/input/LN_get_keyboard_started.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetKeyboardStartedNode(ArmLogicTreeNode): 4 | """.""" 5 | bl_idname = 'LNGetKeyboardStartedNode' 6 | bl_label = 'Get Keyboard Started' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | 12 | self.add_output('ArmNodeSocketAction', 'Out') 13 | self.add_output('ArmStringSocket', 'Key') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/input/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='keyboard', category='Input') 4 | add_node_section(name='mouse', category='Input') 5 | add_node_section(name='gamepad', category='Input') 6 | add_node_section(name='surface', category='Input') 7 | add_node_section(name='sensor', category='Input') 8 | add_node_section(name='virtual', category='Input') 9 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/light/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/light/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_invert_boolean.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class NotNode(ArmLogicTreeNode): 4 | """Inverts the plugged-in boolean. If its input is `true` it outputs `false`.""" 5 | bl_idname = 'LNNotNode' 6 | bl_label = 'Invert Boolean' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmBoolSocket', 'Bool In') 11 | 12 | self.add_output('ArmBoolSocket', 'Bool Out') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_invert_output.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class InverseNode(ArmLogicTreeNode): 5 | """Activates the output if the input is not active.""" 6 | bl_idname = 'LNInverseNode' 7 | bl_label = 'Invert Output' 8 | arm_section = 'flow' 9 | arm_version = 1 10 | 11 | def arm_init(self, context): 12 | self.add_input('ArmNodeSocketAction', 'In') 13 | 14 | self.add_output('ArmNodeSocketAction', 'Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_is_true.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class IsTrueNode(ArmLogicTreeNode): 4 | """Passes through its activation only if the plugged-in boolean 5 | equals `true`. 6 | 7 | @seeNode Is False""" 8 | bl_idname = 'LNIsTrueNode' 9 | bl_label = 'Is True' 10 | arm_version = 1 11 | 12 | def arm_init(self, context): 13 | self.add_input('ArmNodeSocketAction', 'In') 14 | self.add_input('ArmBoolSocket', 'Bool') 15 | 16 | self.add_output('ArmNodeSocketAction', 'Out') 17 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_loop_break.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class LoopBreakNode(ArmLogicTreeNode): 4 | """Terminates the currently executing loop (only one loop is 5 | executed at once). 6 | 7 | @seeNode Loop 8 | @seeNode While 9 | """ 10 | bl_idname = 'LNLoopBreakNode' 11 | bl_label = 'Loop Break' 12 | arm_section = 'flow' 13 | arm_version = 1 14 | 15 | def arm_init(self, context): 16 | self.add_input('ArmNodeSocketAction', 'In') 17 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_loop_continue.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class LoopContinueNode(ArmLogicTreeNode): 4 | """continues to the next loop. 5 | 6 | @seeNode Loop 7 | @seeNode While 8 | """ 9 | bl_idname = 'LNLoopContinueNode' 10 | bl_label = 'Loop Continue' 11 | arm_section = 'flow' 12 | arm_version = 1 13 | 14 | def arm_init(self, context): 15 | self.add_input('ArmNodeSocketAction', 'In') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_null.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class NoneNode(ArmLogicTreeNode): 4 | """A `null` value that can be used in comparisons and conditions.""" 5 | bl_idname = 'LNNoneNode' 6 | bl_label = 'Null' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmDynamicSocket', 'Null') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/LN_output_to_boolean.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ToBoolNode(ArmLogicTreeNode): 4 | """Converts a signal to a boolean value. If the input signal is 5 | active, the boolean is `true`; if not, the boolean is `false`.""" 6 | bl_idname = 'LNToBoolNode' 7 | bl_label = 'Output to Boolean' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketAction', 'In') 12 | 13 | self.add_output('ArmBoolSocket', 'Bool') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/logic/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='flow', category='Logic') 4 | add_node_section(name='function', category='Logic') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/LN_clear_map.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class ClearMapNode(ArmLogicTreeNode): 5 | """Clear Map""" 6 | bl_idname = 'LNClearMapNode' 7 | bl_label = 'Clear Map' 8 | arm_version = 1 9 | 10 | def init(self, context): 11 | self.add_input('ArmNodeSocketAction', 'In') 12 | self.add_input('ArmDynamicSocket', 'Map') 13 | 14 | self.add_output('ArmNodeSocketAction', 'Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/LN_get_map_value.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class GetMapValueNode(ArmLogicTreeNode): 5 | """Get Map Value""" 6 | bl_idname = 'LNGetMapValueNode' 7 | bl_label = 'Get Map Value' 8 | arm_version = 1 9 | 10 | def init(self, context): 11 | self.add_input('ArmDynamicSocket', 'Map') 12 | self.add_input('ArmDynamicSocket', 'Key') 13 | 14 | self.add_output('ArmDynamicSocket', 'Value') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/LN_json_parse.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class ParseJsonNode(ArmLogicTreeNode): 5 | """Parse a JSON String to Haxe object. 6 | 7 | @input JSON: JSON string. 8 | 9 | @output Value: Parsed value. 10 | """ 11 | 12 | bl_idname = 'LNParseJsonNode' 13 | bl_label = 'Parse JSON' 14 | arm_version = 1 15 | 16 | def init(self, context): 17 | self.add_input('ArmStringSocket', 'JSON') 18 | self.add_output('ArmDynamicSocket', 'Value') 19 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/LN_json_stringify.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class JsonStringifyNode(ArmLogicTreeNode): 5 | """Convert a Haxe object to JSON String. 6 | 7 | @input Value: Value to convert. 8 | 9 | @output String: JSON String. 10 | """ 11 | 12 | bl_idname = 'LNJsonStringifyNode' 13 | bl_label = 'JSON Stringify' 14 | arm_version = 1 15 | 16 | def init(self, context): 17 | self.add_input('ArmDynamicSocket', 'Value') 18 | self.add_output('ArmStringSocket', 'JSON') -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/LN_remove_map_key.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RemoveMapKeyNode(ArmLogicTreeNode): 5 | """Remove Map Key""" 6 | bl_idname = 'LNRemoveMapKeyNode' 7 | bl_label = 'Remove Map Key' 8 | arm_version = 1 9 | 10 | def init(self, context): 11 | self.add_input('ArmNodeSocketAction', 'In') 12 | self.add_input('ArmDynamicSocket', 'Map') 13 | self.add_input('ArmDynamicSocket', 'Key') 14 | 15 | self.add_output('ArmNodeSocketAction', 'Out') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/map/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/material/LN_get_object_material.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetMaterialNode(ArmLogicTreeNode): 4 | """Returns the material of the given object.""" 5 | bl_idname = 'LNGetMaterialNode' 6 | bl_label = 'Get Object Material' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Object') 11 | self.add_input('ArmIntSocket', 'Slot') 12 | 13 | self.add_output('ArmDynamicSocket', 'Material') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/material/LN_get_object_materials.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetMaterialsNode(ArmLogicTreeNode): 4 | """Returns the materials of the given object.""" 5 | bl_idname = 'LNGetMaterialsNode' 6 | bl_label = 'Get Object Materials' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Object') 11 | 12 | self.add_output('ArmNodeSocketArray', 'Materials') 13 | self.add_output('ArmIntSocket', 'Length') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/material/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Material') 4 | add_node_section(name='params', category='Material') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/math/LN_deg_to_rad.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class DegToRadNode(ArmLogicTreeNode): 4 | """Converts degrees to radians.""" 5 | bl_idname = 'LNDegToRadNode' 6 | bl_label = 'Deg to Rad' 7 | arm_version = 1 8 | arm_section = 'angle' 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmFloatSocket', 'Degrees') 12 | 13 | self.add_output('ArmFloatSocket', 'Radians') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/math/LN_rad_to_deg.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class RadToDegNode(ArmLogicTreeNode): 4 | """Converts radians to degrees.""" 5 | bl_idname = 'LNRadToDegNode' 6 | bl_label = 'Rad to Deg' 7 | arm_version = 1 8 | arm_section = 'angle' 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmFloatSocket', 'Radians') 12 | 13 | self.add_output('ArmFloatSocket', 'Degrees') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/math/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Math') 4 | add_node_section(name='angle', category='Math') 5 | add_node_section(name='matrix', category='Math') 6 | add_node_section(name='color', category='Math') 7 | add_node_section(name='vector', category='Math') 8 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_boolean_to_int.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class IntFromBooleanNode(ArmLogicTreeNode): 4 | """Returns an int depending on the respective boolean state.""" 5 | bl_idname = 'LNIntFromBooleanNode' 6 | bl_label = 'Boolean to Int' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.inputs.new('ArmBoolSocket', 'Bool') 11 | 12 | self.outputs.new('ArmIntSocket', 'Int') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_get_application_time.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class TimeNode(ArmLogicTreeNode): 4 | """Returns the application execution time and the delta time.""" 5 | bl_idname = 'LNTimeNode' 6 | bl_label = 'Get Application Time' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmFloatSocket', 'Time') 11 | self.add_output('ArmFloatSocket', 'Delta') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_get_display_resolution.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class DisplayInfoNode(ArmLogicTreeNode): 4 | """Returns the current display resolution. 5 | 6 | @seeNode Get Window Resolution 7 | """ 8 | bl_idname = 'LNDisplayInfoNode' 9 | bl_label = 'Get Display Resolution' 10 | arm_section = 'screen' 11 | arm_version = 1 12 | 13 | def arm_init(self, context): 14 | self.add_output('ArmIntSocket', 'Width') 15 | self.add_output('ArmIntSocket', 'Height') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_get_fps.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetFPSNode(ArmLogicTreeNode): 4 | """Get the frames per second count.""" 5 | bl_idname = 'LNGetFPSNode' 6 | bl_label = 'Get Frames Per Second' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmIntSocket', 'Count') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_get_window_resolution.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class WindowInfoNode(ArmLogicTreeNode): 4 | """Returns the current window resolution. 5 | 6 | @seeNode Get Display Resolution 7 | """ 8 | bl_idname = 'LNWindowInfoNode' 9 | bl_label = 'Get Window Resolution' 10 | arm_section = 'screen' 11 | arm_version = 1 12 | 13 | def arm_init(self, context): 14 | self.add_output('ArmIntSocket', 'Width') 15 | self.add_output('ArmIntSocket', 'Height') 16 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_set_time_scale.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SetTimeScaleNode(ArmLogicTreeNode): 4 | """Sets the global time scale.""" 5 | bl_idname = 'LNSetTimeScaleNode' 6 | bl_label = 'Set Time Scale' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmFloatSocket', 'Scale', default_value=1.0) 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/LN_sleep.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SleepNode(ArmLogicTreeNode): 4 | """Waits a specified amount of seconds until passing 5 | through the incoming signal.""" 6 | bl_idname = 'LNSleepNode' 7 | bl_label = 'Sleep' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketAction', 'In') 12 | self.add_input('ArmFloatSocket', 'Time') 13 | 14 | self.add_output('ArmNodeSocketAction', 'Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/miscellaneous/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='group', category='Miscellaneous') 4 | add_node_section(name='screen', category='Miscellaneous') 5 | add_node_section(name='default', category='Miscellaneous') 6 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/native/LN_clear_console.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class PrintNode(ArmLogicTreeNode): 4 | """Clears the system console.""" 5 | bl_idname = 'LNClearConsoleNode' 6 | bl_label = 'Clear Console' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | 12 | self.add_output('ArmNodeSocketAction', 'Out') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/native/LN_get_system_language.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetSystemLanguage(ArmLogicTreeNode): 4 | """Returns the language of the current system.""" 5 | bl_idname = 'LNGetSystemLanguage' 6 | bl_label = 'Get System Language' 7 | arm_section = 'Native' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmStringSocket', 'Language') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/native/LN_print.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class PrintNode(ArmLogicTreeNode): 4 | """Print the given value to the console.""" 5 | bl_idname = 'LNPrintNode' 6 | bl_label = 'Print' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmStringSocket', 'String') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/native/LN_shutdown.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ShutdownNode(ArmLogicTreeNode): 4 | """Closes the application.""" 5 | bl_idname = 'LNShutdownNode' 6 | bl_label = 'Shutdown' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | 12 | self.add_output('ArmNodeSocketAction', 'Out') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/native/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/native/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/navmesh/LN_get_agent_data.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetAgentDataNode(ArmLogicTreeNode): 4 | """Gets the speed and turn duration of the agent""" 5 | bl_idname = 'LNGetAgentDataNode' 6 | bl_label = 'Get Agent Data' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Object') 11 | 12 | self.add_output('ArmFloatSocket', 'Speed') 13 | self.add_output('ArmFloatSocket', 'Turn Duration') -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/navmesh/LN_navigable_location.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class NavigableLocationNode(ArmLogicTreeNode): 4 | """TO DO.""" 5 | bl_idname = 'LNNavigableLocationNode' 6 | bl_label = 'Navigable Location' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmDynamicSocket', 'Location') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/navmesh/LN_pick_navmesh_location.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class PickLocationNode(ArmLogicTreeNode): 4 | """Pick a location coordinates in the given NavMesh.""" 5 | bl_idname = 'LNPickLocationNode' 6 | bl_label = 'Pick NavMesh Location' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'NavMesh') 11 | self.add_input('ArmVectorSocket', 'Screen Coords') 12 | 13 | self.add_output('ArmVectorSocket', 'Location') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/navmesh/LN_stop_agent.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class StopAgentNode(ArmLogicTreeNode): 4 | """Stops the given NavMesh agent.""" 5 | bl_idname = 'LNStopAgentNode' 6 | bl_label = 'Stop Agent' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/navmesh/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/navmesh/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/network/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_by_name.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | 3 | from arm.logicnode.arm_nodes import * 4 | 5 | 6 | class GetObjectNode(ArmLogicTreeNode): 7 | """Searches for a object that uses the given name in the current active scene and returns it.""" 8 | 9 | bl_idname = 'LNGetObjectNode' 10 | bl_label = 'Get Object by Name' 11 | arm_version = 1 12 | 13 | def arm_init(self, context): 14 | self.add_input('ArmStringSocket', 'Name') 15 | 16 | self.add_output('ArmNodeSocketObject', 'Object') 17 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_by_uid.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | 3 | from arm.logicnode.arm_nodes import * 4 | 5 | 6 | class GetObjectByUidNode(ArmLogicTreeNode): 7 | """Searches for a object with this uid in the current active scene and returns it.""" 8 | 9 | bl_idname = 'LNGetObjectByUidNode' 10 | bl_label = 'Get Object By Uid' 11 | arm_version = 1 12 | 13 | def arm_init(self, context): 14 | self.add_input('ArmIntSocket', 'Uid') 15 | 16 | self.add_output('ArmNodeSocketObject', 'Object') 17 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_children.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetChildrenNode(ArmLogicTreeNode): 4 | """Returns the children of the given object.""" 5 | bl_idname = 'LNGetChildrenNode' 6 | bl_label = 'Get Object Children' 7 | arm_section = 'relations' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Parent') 12 | 13 | self.add_output('ArmNodeSocketArray', 'Children') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_mesh.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetMeshNode(ArmLogicTreeNode): 4 | """Returns the mesh of the given object.""" 5 | bl_idname = 'LNGetMeshNode' 6 | bl_label = 'Get Object Mesh' 7 | arm_section = 'props' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmDynamicSocket', 'Mesh') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_name.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetNameNode(ArmLogicTreeNode): 4 | """Returns the name of the given object.""" 5 | bl_idname = 'LNGetNameNode' 6 | bl_label = 'Get Object Name' 7 | arm_section = 'props' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmStringSocket', 'Name') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_get_object_uid.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetUidNode(ArmLogicTreeNode): 4 | """Returns the uid of the given object.""" 5 | bl_idname = 'LNGetUidNode' 6 | bl_label = 'Get Object Uid' 7 | arm_section = 'props' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmIntSocket', 'Uid') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/LN_self_object.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SelfObjectNode(ArmLogicTreeNode): 4 | """Returns the object that owns the trait.""" 5 | bl_idname = 'LNSelfNode' 6 | bl_label = 'Self Object' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmNodeSocketObject', 'Object') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/object/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Object') 4 | add_node_section(name='props', category='Object') 5 | add_node_section(name='relations', category='Object') 6 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/particle/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Particle') 4 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/LN_get_rb_point_velocity.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetPointVelocityNode(ArmLogicTreeNode): 4 | """Returns the world velocity of the given point along the rigid body.""" 5 | bl_idname = 'LNGetPointVelocityNode' 6 | bl_label = 'Get RB Point Velocity' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'RB') 11 | self.add_input('ArmVectorSocket', 'Point') 12 | 13 | self.add_output('ArmVectorSocket', 'Velocity') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/LN_get_world_gravity.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetGravityNode(ArmLogicTreeNode): 4 | """Returns the world gravity. 5 | 6 | @seeNode Set Gravity 7 | """ 8 | bl_idname = 'LNGetGravityNode' 9 | bl_label = 'Get World Gravity' 10 | arm_version = 1 11 | 12 | def arm_init(self, context): 13 | self.add_output('ArmVectorSocket', 'World Gravity') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/LN_is_rb_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class IsRigidBodyActiveNode(ArmLogicTreeNode): 4 | """Returns whether the given rigid body is active or sleeping.""" 5 | bl_idname = 'LNIsRigidBodyActiveNode' 6 | bl_label = 'RB Is Active' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'RB') 11 | self.add_output('ArmBoolSocket', 'Is Active') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/LN_remove_rb.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class RemovePhysicsNode (ArmLogicTreeNode): 4 | """Removes the rigid body from the given object.""" 5 | bl_idname = 'LNRemovePhysicsNode' 6 | bl_label = 'Remove RB' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.inputs.new('ArmNodeSocketAction', 'In') 11 | self.inputs.new('ArmNodeSocketObject', 'RB') 12 | 13 | self.outputs.new('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/LN_set_world_gravity.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SetGravityNode(ArmLogicTreeNode): 4 | """Sets the world gravity. 5 | 6 | @seeNode Get World Gravity 7 | """ 8 | bl_idname = 'LNSetGravityNode' 9 | bl_label = 'Set World Gravity' 10 | arm_version = 1 11 | 12 | def arm_init(self, context): 13 | self.add_input('ArmNodeSocketAction', 'In') 14 | self.add_input('ArmVectorSocket', 'Gravity') 15 | 16 | self.add_output('ArmNodeSocketAction', 'Out') 17 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/physics/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Physics') 4 | add_node_section(name='force', category='Physics') 5 | add_node_section(name='contact', category='Physics') 6 | add_node_section(name='ray', category='Physics') 7 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/LN_get_auto_exposure_settings.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class AutoExposureGetNode(ArmLogicTreeNode): 4 | """Returns the auto exposure post-processing settings.""" 5 | bl_idname = 'LNAutoExposureGetNode' 6 | bl_label = 'Get Auto Exposure Settings' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmFloatSocket', 'Strength') 11 | self.add_output('ArmFloatSocket', 'Speed') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/LN_get_letterbox_settings.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class LetterboxGetNode(ArmLogicTreeNode): 4 | """Returns the letterbox post-processing settings.""" 5 | bl_idname = 'LNLetterboxGetNode' 6 | bl_label = 'Get Letterbox Settings' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmColorSocket', 'Color') 11 | self.add_output('ArmFloatSocket', 'Size') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/LN_get_sharpen_settings.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SharpenGetNode(ArmLogicTreeNode): 4 | """Returns the sharpen post-processing settings.""" 5 | bl_idname = 'LNSharpenGetNode' 6 | bl_label = 'Get Sharpen Settings' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmColorSocket', 'Color') 11 | self.add_output('ArmFloatSocket', 'Size') 12 | self.add_output('ArmFloatSocket', 'Strength') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/LN_get_ssao_settings.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SSAOGetNode(ArmLogicTreeNode): 4 | """Returns the SSAO post-processing settings.""" 5 | bl_idname = 'LNSSAOGetNode' 6 | bl_label = 'Get SSAO Settings' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmFloatSocket', 'Radius') 11 | self.add_output('ArmFloatSocket', 'Strength') 12 | self.add_output('ArmFloatSocket', 'Max Steps') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/LN_get_volumetric_fog_settings.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class VolumetricFogGetNode(ArmLogicTreeNode): 4 | """Returns the volumetric fog post-processing settings.""" 5 | bl_idname = 'LNVolumetricFogGetNode' 6 | bl_label = 'Get Volumetric Fog Settings' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmColorSocket', 'Color') 11 | self.add_output('ArmFloatSocket', 'Amount A') 12 | self.add_output('ArmFloatSocket', 'Amount B') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/postprocess/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Postprocess') 4 | add_node_section(name='colorgrading', category='Postprocess') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_boolean.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomBooleanNode(ArmLogicTreeNode): 5 | """Generates a random boolean.""" 6 | bl_idname = 'LNRandomBooleanNode' 7 | bl_label = 'Random Boolean' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmBoolSocket', 'Bool') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_choice.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomChoiceNode(ArmLogicTreeNode): 5 | """Choose a random value from a given array.""" 6 | bl_idname = 'LNRandomChoiceNode' 7 | bl_label = 'Random Choice' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | 12 | self.add_input('ArmNodeSocketArray', 'Array') 13 | self.add_output('ArmDynamicSocket', 'Value') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_color.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomColorNode(ArmLogicTreeNode): 5 | """Generates a random color.""" 6 | bl_idname = 'LNRandomColorNode' 7 | bl_label = 'Random Color' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmColorSocket', 'Color') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_float.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomFloatNode(ArmLogicTreeNode): 5 | """Generates a random float.""" 6 | bl_idname = 'LNRandomFloatNode' 7 | bl_label = 'Random Float' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmFloatSocket', 'Min') 12 | self.add_input('ArmFloatSocket', 'Max', default_value=1.0) 13 | # self.add_input('ArmIntSocket', 'Seed') 14 | self.add_output('ArmFloatSocket', 'Float') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_integer.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomIntegerNode(ArmLogicTreeNode): 5 | """Generates a random integer.""" 6 | bl_idname = 'LNRandomIntegerNode' 7 | bl_label = 'Random Integer' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmIntSocket', 'Min') 12 | self.add_input('ArmIntSocket', 'Max', default_value=2) 13 | self.add_output('ArmIntSocket', 'Int') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/LN_random_vector.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class RandomVectorNode(ArmLogicTreeNode): 5 | """Generates a random vector.""" 6 | bl_idname = 'LNRandomVectorNode' 7 | bl_label = 'Random Vector' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmVectorSocket', 'Min', default_value=[-1.0, -1.0, -1.0]) 12 | self.add_input('ArmVectorSocket', 'Max', default_value=[1.0, 1.0, 1.0]) 13 | self.add_output('ArmVectorSocket', 'Vector') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/random/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/random/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/renderpath/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/renderpath/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_get_object_collection.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetObjectGroupNode(ArmLogicTreeNode): 4 | """Get Object collection.""" 5 | bl_idname = 'LNGetObjectGroupNode' 6 | bl_label = 'Get Object Collection' 7 | arm_section = 'collection' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmNodeSocketArray', 'Collection') 14 | self.add_output('ArmIntSocket', 'Length') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_get_scene_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ActiveSceneNode(ArmLogicTreeNode): 4 | """Returns the active scene.""" 5 | bl_idname = 'LNActiveSceneNode' 6 | bl_label = 'Get Scene Active' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmDynamicSocket', 'Scene') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_get_scene_root.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SceneRootNode(ArmLogicTreeNode): 4 | """Returns the root object of the current scene.""" 5 | bl_idname = 'LNSceneRootNode' 6 | bl_label = 'Get Scene Root' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmNodeSocketObject', 'Object') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_global_object.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GlobalObjectNode(ArmLogicTreeNode): 4 | """Gives access to a global object which can be used to share 5 | information between different traits.""" 6 | bl_idname = 'LNGlobalObjectNode' 7 | bl_label = 'Global Object' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmNodeSocketObject', 'Object') 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_remove_collection.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class RemoveGroupNode(ArmLogicTreeNode): 4 | """Removes the given collection from the scene.""" 5 | bl_idname = 'LNRemoveGroupNode' 6 | bl_label = 'Remove Collection' 7 | arm_section = 'collection' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketAction', 'In') 12 | self.add_input('ArmStringSocket', 'Collection') 13 | 14 | self.add_output('ArmNodeSocketAction', 'Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_remove_scene_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class RemoveActiveSceneNode(ArmLogicTreeNode): 4 | """Removes the active scene.""" 5 | bl_idname = 'LNRemoveActiveSceneNode' 6 | bl_label = 'Remove Scene Active' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | 12 | self.add_output('ArmNodeSocketAction', 'Out') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/LN_set_scene_active.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SetSceneNode(ArmLogicTreeNode): 4 | """Sets the active scene.""" 5 | bl_idname = 'LNSetSceneNode' 6 | bl_label = 'Set Scene Active' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmDynamicSocket', 'Scene') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | self.add_output('ArmNodeSocketObject', 'Root') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/scene/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Scene') 4 | add_node_section(name='traits', category='Scene') 5 | add_node_section(name='collection', category='Scene') 6 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/sound/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/sound/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/LN_parse_float.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ParseFloatNode(ArmLogicTreeNode): 4 | """Returns the floats that are in the given string.""" 5 | bl_idname = 'LNParseFloatNode' 6 | bl_label = 'Parse Float' 7 | arm_section = 'parse' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmFloatSocket', 'Float') 12 | 13 | self.add_input('ArmStringSocket', 'String') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/LN_parse_int.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class ParseIntNode(ArmLogicTreeNode): 4 | """Returns the Ints that are in the given string.""" 5 | bl_idname = 'LNParseIntNode' 6 | bl_label = 'Parse Int' 7 | arm_section = 'parse' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmIntSocket', 'Int') 12 | 13 | self.add_input('ArmStringSocket', 'String') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/LN_split_string.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SplitStringNode(ArmLogicTreeNode): 4 | """Splits the given string.""" 5 | bl_idname = 'LNSplitStringNode' 6 | bl_label = 'Split String' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmNodeSocketArray', 'Array') 11 | 12 | self.add_input('ArmStringSocket', 'String') 13 | self.add_input('ArmStringSocket', 'Split') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/LN_string_length.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class LengthStringNode(ArmLogicTreeNode): 4 | """Returns the length of the given string.""" 5 | bl_idname = 'LNLengthStringNode' 6 | bl_label = 'String Length' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmIntSocket', 'Length') 11 | 12 | self.add_input('ArmStringSocket', 'String') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/LN_sub_string.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SubStringNode(ArmLogicTreeNode): 4 | """Returns a part of the given string.""" 5 | bl_idname = 'LNSubStringNode' 6 | bl_label = 'Sub String' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmStringSocket', 'String In') 11 | self.add_input('ArmIntSocket', 'Start') 12 | self.add_input('ArmIntSocket', 'End') 13 | 14 | self.add_output('ArmStringSocket', 'String Out') 15 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/string/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='String') 4 | add_node_section(name='parse', category='String') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/LN_get_object_traits.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetObjectTraitsNode(ArmLogicTreeNode): 4 | """Returns all traits from the given object.""" 5 | bl_idname = 'LNGetObjectTraitsNode' 6 | bl_label = 'Get Object Traits' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketObject', 'Object') 11 | 12 | self.add_output('ArmNodeSocketArray', 'Traits') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/LN_get_trait_name.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetTraitNameNode(ArmLogicTreeNode): 4 | """Returns the name and the class type of the given trait.""" 5 | bl_idname = 'LNGetTraitNameNode' 6 | bl_label = 'Get Trait Name' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmDynamicSocket', 'Trait') 11 | 12 | self.add_output('ArmStringSocket', 'Name') 13 | self.add_output('ArmStringSocket', 'Class Type') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/LN_get_trait_paused.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetTraitPausedNode(ArmLogicTreeNode): 4 | """Returns whether the given trait is paused.""" 5 | bl_idname = 'LNGetTraitPausedNode' 6 | bl_label = 'Get Trait Paused' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmDynamicSocket', 'Trait') 11 | 12 | self.add_output('ArmBoolSocket', 'Is Paused') 13 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/LN_remove_trait.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class RemoveTraitNode(ArmLogicTreeNode): 4 | """Removes the given trait.""" 5 | bl_idname = 'LNRemoveTraitNode' 6 | bl_label = 'Remove Trait' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmDynamicSocket', 'Trait') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/LN_self_trait.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SelfTraitNode(ArmLogicTreeNode): 4 | """Returns the trait that owns this node.""" 5 | bl_idname = 'LNSelfTraitNode' 6 | bl_label = 'Self Trait' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmDynamicSocket', 'Trait') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/trait/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/arm/logicnode/trait/__init__.py -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/transform/LN_get_object_dimension.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetDimensionNode(ArmLogicTreeNode): 4 | """Returns the dimension of the given object.""" 5 | bl_idname = 'LNGetDimensionNode' 6 | bl_label = 'Get Object Dimension' 7 | arm_section = 'dimension' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmVectorSocket', 'Dimension') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/transform/LN_get_object_scale.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetScaleNode(ArmLogicTreeNode): 4 | """Returns the scale of the given object.""" 5 | bl_idname = 'LNGetScaleNode' 6 | bl_label = 'Get Object Scale' 7 | arm_section = 'scale' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_input('ArmNodeSocketObject', 'Object') 12 | 13 | self.add_output('ArmVectorSocket', 'Scale') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/transform/LN_transform_math.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class TransformMathNode(ArmLogicTreeNode): 4 | """Operates the two given transform values.""" 5 | bl_idname = 'LNTransformMathNode' 6 | bl_label = 'Transform Math' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmDynamicSocket', 'Transform 1') 11 | self.add_input('ArmDynamicSocket', 'Transform 2') 12 | 13 | self.add_output('ArmDynamicSocket', 'Result') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/transform/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='Transform') 4 | add_node_section(name='location', category='Transform') 5 | add_node_section(name='rotation', category='Transform') 6 | add_node_section(name='scale', category='Transform') 7 | add_node_section(name='quaternions', category='Transform') 8 | add_node_section(name='misc', category='Transform') 9 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/variable/LN_dynamic.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | 4 | class DynamicNode(ArmLogicVariableNodeMixin, ArmLogicTreeNode): 5 | """Stores the given dynamic value (a value with an arbitrary type) as a variable.""" 6 | bl_idname = 'LNDynamicNode' 7 | bl_label = 'Dynamic' 8 | arm_version = 1 9 | 10 | def arm_init(self, context): 11 | self.add_output('ArmDynamicSocket', 'Dynamic', is_var=True) 12 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/variable/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='set', category='Variable') 4 | add_node_section(name='default', category='Variable') 5 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/world/LN_get_world_strength.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class GetWorldStrengthNode(ArmLogicTreeNode): 4 | """Gets the strength of the given World.""" 5 | bl_idname = 'LNGetWorldStrengthNode' 6 | bl_label = 'Get World Strength' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_output('ArmFloatSocket', 'Strength') 11 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/world/LN_set_world_strength.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import * 2 | 3 | class SetWorldStrengthNode(ArmLogicTreeNode): 4 | """Sets the strength of the given World.""" 5 | bl_idname = 'LNSetWorldStrengthNode' 6 | bl_label = 'Set World Strength' 7 | arm_version = 1 8 | 9 | def arm_init(self, context): 10 | self.add_input('ArmNodeSocketAction', 'In') 11 | self.add_input('ArmFloatSocket', 'Strength') 12 | 13 | self.add_output('ArmNodeSocketAction', 'Out') 14 | -------------------------------------------------------------------------------- /armory/blender/arm/logicnode/world/__init__.py: -------------------------------------------------------------------------------- 1 | from arm.logicnode.arm_nodes import add_node_section 2 | 3 | add_node_section(name='default', category='world') -------------------------------------------------------------------------------- /armory/blender/arm/make_state.py: -------------------------------------------------------------------------------- 1 | import arm 2 | 3 | if not arm.is_reload(__name__): 4 | arm.enable_reload(__name__) 5 | 6 | redraw_ui = False 7 | target = 'krom' 8 | last_target = 'krom' 9 | export_gapi = '' 10 | last_resx = 0 11 | last_resy = 0 12 | last_scene = '' 13 | last_world_defs = '' 14 | proc_play = None 15 | proc_build = None 16 | proc_publish_build = None 17 | mod_scripts = [] 18 | is_export = False 19 | is_play = False 20 | is_publish = False 21 | -------------------------------------------------------------------------------- /armory/blender/arm/material/__init__.py: -------------------------------------------------------------------------------- 1 | import arm 2 | -------------------------------------------------------------------------------- /armory/blender/arm/material/arm_nodes/__init__.py: -------------------------------------------------------------------------------- 1 | """Import all nodes""" 2 | import glob 3 | from os.path import dirname, basename, isfile 4 | 5 | modules = glob.glob(dirname(__file__) + "/*.py") 6 | __all__ = [basename(f)[:-3] for f in modules if isfile(f)] 7 | -------------------------------------------------------------------------------- /armory/blender/arm/material/arm_nodes/arm_nodes.py: -------------------------------------------------------------------------------- 1 | from typing import Type 2 | 3 | from bpy.types import Node 4 | import nodeitems_utils 5 | 6 | nodes = [] 7 | category_items = {} 8 | 9 | 10 | def add_node(node_class: Type[Node], category: str): 11 | global nodes 12 | nodes.append(node_class) 13 | if category_items.get(category) is None: 14 | category_items[category] = [] 15 | category_items[category].append(nodeitems_utils.NodeItem(node_class.bl_idname)) 16 | -------------------------------------------------------------------------------- /armory/blender/arm/material/cycles_nodes/__init__.py: -------------------------------------------------------------------------------- 1 | import glob 2 | from os.path import dirname, basename, isfile 3 | 4 | modules = glob.glob(dirname(__file__) + "/*.py") 5 | __all__ = [basename(f)[:-3] for f in modules if isfile(f)] 6 | -------------------------------------------------------------------------------- /armory/blender/data/arm_data.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/data/arm_data.blend -------------------------------------------------------------------------------- /armory/blender/data/skydome.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/armory/blender/data/skydome.blend -------------------------------------------------------------------------------- /lib/armory2d/Assets/black_white_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/lib/armory2d/Assets/black_white_gradient.png -------------------------------------------------------------------------------- /lib/armory2d/Assets/color_wheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/lib/armory2d/Assets/color_wheel.png -------------------------------------------------------------------------------- /lib/armory2d/Assets/font_default.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/lib/armory2d/Assets/font_default.ttf -------------------------------------------------------------------------------- /lib/armory2d/Assets/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armory3d/armory/a2648fda6e9a9b106dcf48e9a90af9e67fb2942d/lib/armory2d/Assets/icons.png -------------------------------------------------------------------------------- /lib/armory2d/khafile.js: -------------------------------------------------------------------------------- 1 | let project = new Project('Armory2D'); 2 | 3 | project.addSources('Sources'); 4 | project.addAssets('Assets/**/*.png'); 5 | project.addAssets('Assets/**/*.ttf'); 6 | project.addLibrary('zui'); 7 | project.addLibrary('armory'); 8 | 9 | resolve(project); 10 | --------------------------------------------------------------------------------