| 2639 | } |
| 2640 | |
| 2641 | HNode NewNode(HScene scene, const Point3& position, const Vector3& size, NodeType node_type, uint32_t custom_type) |
| 2642 | { |
| 2643 | uint16_t index = AllocateNode(scene); |
| 2644 | if (index == scene->m_NodePool.Capacity()) |
| 2645 | { |
| 2646 | dmLogError("Could not create the node since the buffer is full (%d).", scene->m_NodePool.Capacity()); |
| 2647 | return 0; |
| 2648 | } |
| 2649 | uint16_t version = scene->m_NextVersionNumber; |
| 2650 | if (version == 0) |
| 2651 | { |
| 2652 | // We can't use zero in order to avoid a handle == 0 |
| 2653 | ++version; |
| 2654 | } |
| 2655 | |
| 2656 | InternalNode* node = &scene->m_Nodes[index]; |
| 2657 | memset(node, 0, sizeof(InternalNode)); |
| 2658 | node->m_Node.m_Properties[PROPERTY_POSITION] = Vector4(Vector3(position), 1); |
| 2659 | node->m_Node.m_Properties[PROPERTY_ROTATION] = Vector4(0, 0, 0, 1); |
| 2660 | node->m_Node.m_Properties[PROPERTY_SCALE] = Vector4(1,1,1,0); |
| 2661 | node->m_Node.m_Properties[PROPERTY_COLOR] = Vector4(1,1,1,1); |
| 2662 | node->m_Node.m_Properties[PROPERTY_OUTLINE] = Vector4(0,0,0,1); |
| 2663 | node->m_Node.m_Properties[PROPERTY_SHADOW] = Vector4(0,0,0,1); |
| 2664 | node->m_Node.m_Properties[PROPERTY_SIZE] = Vector4(size, 0); |
| 2665 | node->m_Node.m_Properties[PROPERTY_SLICE9] = Vector4(0,0,0,0); |
| 2666 | node->m_Node.m_Properties[PROPERTY_PIE_PARAMS] = Vector4(0,360,0,0); |
| 2667 | node->m_Node.m_Properties[PROPERTY_TEXT_PARAMS] = Vector4(1, 0, 0, 0); |
| 2668 | node->m_Node.m_Properties[PROPERTY_EULER] = Vector4(0); |
| 2669 | node->m_Node.m_Properties[PROPERTY_PREV_EULER] = Vector4(0); |
| 2670 | node->m_Node.m_LocalTransform = Matrix4::identity(); |
| 2671 | node->m_Node.m_LocalAdjustScale = Vector4(1.0, 1.0, 1.0, 1.0); |
| 2672 | node->m_Node.m_PerimeterVertices = 32; |
| 2673 | node->m_Node.m_OuterBounds = PIEBOUNDS_ELLIPSE; |
| 2674 | node->m_Node.m_BlendMode = 0; |
| 2675 | node->m_Node.m_NodeType = (uint32_t) node_type; |
| 2676 | node->m_Node.m_CustomType = custom_type; |
| 2677 | node->m_Node.m_XAnchor = 0; |
| 2678 | node->m_Node.m_YAnchor = 0; |
| 2679 | node->m_Node.m_Pivot = 0; |
| 2680 | node->m_Node.m_AdjustMode = 0; |
| 2681 | node->m_Node.m_SizeMode = SIZE_MODE_MANUAL; |
| 2682 | node->m_Node.m_LineBreak = 0; |
| 2683 | node->m_Node.m_Enabled = 1; |
| 2684 | node->m_Node.m_IsVisible = 1; |
| 2685 | node->m_Node.m_DirtyLocal = 1; |
| 2686 | node->m_Node.m_InheritAlpha = 0; |
| 2687 | node->m_Node.m_ClippingMode = CLIPPING_MODE_NONE; |
| 2688 | node->m_Node.m_ClippingVisible = true; |
| 2689 | node->m_Node.m_ClippingInverted = false; |
| 2690 | |
| 2691 | node->m_Node.m_HasResetPoint = 0; |
| 2692 | node->m_Node.m_TextureHash = 0; |
| 2693 | node->m_Node.m_Texture = 0; |
| 2694 | node->m_Node.m_TextureType = NODE_TEXTURE_TYPE_NONE; |
| 2695 | node->m_Node.m_TextureSetAnimDesc.Init(); |
| 2696 | node->m_Node.m_FlipbookAnimHash = 0; |
| 2697 | node->m_Node.m_FlipbookAnimPosition = 0.0f; |
| 2698 | node->m_Node.m_FontHash = 0; |