Esempio n. 1
0
 private static void AddBillboard(Entity e, Resource.Mat material, bool flipTextureFacing)
 {
     AddMesh(e, Resource.Mesh.QuadBillboard, material);
     m.AddComponentData(e, new C_IsBillboarded
     {
         flipTexureFacing = flipTextureFacing,
         xScale           = 1f
     });
 }
Esempio n. 2
0
 private static void AddMesh(Entity e, Resource.Mesh mesh, Resource.Mat material)
 {
     m.AddComponentData(e, new C_HasMesh
     {
         mesh     = mesh,
         material = material,
         UV       = new float4(1f, 1f, 0f, 0f),
         color    = Color.white
     });
 }
Esempio n. 3
0
    private static void ConstructTerrain(Entity e, EntityID.ID id, float3 pos, Resource.Mat material)
    {
        AddTransform(e, pos);

        // FIXME: Position in Leveldata should be set directly from Level instead of from world space instantiation position.
        m.AddComponentData(e, new C_LevelData {
            id = id, x = (int)pos.x, y = (int)(pos.y * 2), z = (int)pos.z
        });
        m.AddComponentData(e, new C_Ability_CanConnectMeshToNeighbors());
        m.AddComponentData(e, new C_State_IsAwaitingNeighborMeshRefresh());

        AddMesh(e, Resource.Mesh.Slab, material);
        m.AddComponentData(e, CreateBoxCollider(1f, 0.5f, 1f, 0f, 0.25f, 0f, filterSolidEnvironment, CreatePhysicsMaterial(0f, 0f, false)));
    }
Esempio n. 4
0
    private static void ConstructItem(Entity e, float3 pos, Resource.Mat material)
    {
        AddTransform(e, pos);
        AddBillboard(e, material, false);
        AddAnimation(e, UVAnimation.Anim.Character_Walk, 5f, false);

        m.AddComponentData(e, new C_Ability_CanBeHeld());
        m.AddComponentData(e, new C_Ability_CanReactToForce {
            forceResistanceFactor = 0.5f
        });

        PhysicsCollider triggerCollider  = CreateMeshCollider(Resource.Mesh.Cylinder, 1f, filterBodyTrigger, CreatePhysicsMaterial(0f, 0f, true));
        PhysicsCollider itemBodyCollider = CreateMeshCollider(Resource.Mesh.Cylinder, 0.5f, filterSolidBodyItem, CreatePhysicsMaterial(0f, 0f, false));

        m.AddComponentData(e, CreateCompoundCollider(triggerCollider, itemBodyCollider));

        AddMass(e, itemBodyCollider);
        m.AddComponentData(e, new PhysicsVelocity());
        m.AddComponentData(e, new C_Ability_CanMoveVertically());
        m.AddComponentData(e, new C_Ability_AffectedByGravity());
    }
Esempio n. 5
0
    private static void ConstructCharacter(Entity e, float3 pos, Resource.Mat material, float speed, int playerID)
    {
        AddTransform(e, pos + new float3(0f, 0.15f, 0f));

        // Graphics and Animation
        AddBillboard(e, material, true);
        AddAnimation(e, UVAnimation.Anim.Character_Stand, 10f, false);
        DynamicBuffer <C_BufferElement_EntityAnimation> dynamicBuffer = m.AddBuffer <C_BufferElement_EntityAnimation>(e);

        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Attack, speed = 8f, priority = 40, determiner = AnimationStateDeterminer.IsAttacking
        });
        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Fall, speed = 8f, priority = 20, determiner = AnimationStateDeterminer.IsFalling
        });
        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Hurt, speed = 8f, priority = 30, determiner = AnimationStateDeterminer.IsHurt
        });
        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Jump, speed = 8f, priority = 21, determiner = AnimationStateDeterminer.IsRising
        });
        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Stand, speed = 6f, priority = 00, determiner = AnimationStateDeterminer.Default
        });
        dynamicBuffer.Add(new C_BufferElement_EntityAnimation {
            anim = UVAnimation.Anim.Character_Walk, speed = 8f, priority = 10, determiner = AnimationStateDeterminer.IsControllingLateralMovement
        });

        // Colliders
        PhysicsCollider triggerCollider = CreateMeshCollider(Resource.Mesh.Cylinder, 1f, filterBodyTrigger, CreatePhysicsMaterial(0f, 0f, true));
        PhysicsCollider bodyCollider    = CreateMeshCollider(Resource.Mesh.Cylinder, new float3(0.5f, 1f, 0.5f), filterSolidBodyCharacter, CreatePhysicsMaterial(0f, 0f, false));

        m.AddComponentData(e, CreateCompoundCollider(triggerCollider, bodyCollider));
        AddMass(e, bodyCollider);

        // Movement
        m.AddComponentData(e, new PhysicsVelocity());
        m.AddComponentData(e, new C_Ability_CanControlLateralMovement {
            speed = speed
        });
        m.AddComponentData(e, new C_Ability_CanJump {
            power = 400f
        });
        m.AddComponentData(e, new C_Ability_CanMoveVertically());
        m.AddComponentData(e, new C_Ability_AffectedByGravity());

        // Abilities
        m.AddComponentData(e, new C_Ability_CanHold());
        m.AddComponentData(e, new C_Ability_CanAttack());
        m.AddComponentData(e, new C_Ability_CanDie {
            deathTimer = 0.15f
        });
        m.AddComponentData(e, new C_Ability_CanReactToForce {
            forceResistanceFactor = 1f
        });

        // Control
        if (playerID > 0)
        {
            m.AddComponentData(e, new C_Controller_Player {
                playerID = playerID
            });
            m.AddComponentData(e, new C_IsFollowedByCamera());
            m.AddComponentData(e, new C_Ability_CanTakeDamage {
                health = 50f
            });
            m.AddComponentData(e, new C_Ability_CanBeScannedByAI());
        }
        else
        {
            m.AddComponentData(e, new C_Controller_AI {
                idleBehavior = AIBehavior.Wander, reactionBehavior = AIBehavior.ChaseAndAttackEntity
            });
            m.AddComponentData(e, new C_Ability_CanTakeDamage {
                health = 3f
            });
            InstantiateScanEntity(e);
        }
    }