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 }); }
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 }); }
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))); }
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()); }
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); } }