public Projectile(Vector3 position, Vector3 initialVelocity, Health.DamageAmount damage, float size, string asset, string hitParticles, string hitNoise, string faction) : base("Projectile", PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(position), new Vector3(size, size, size), Vector3.One, 1.0f, 1.0f, 1.0f, 1.0f, new Vector3(0, -10, 0)) { Faction = PlayState.ComponentManager.Factions.Factions[faction]; HitAnimation = null; IsSleeping = false; Velocity = initialVelocity; Orientation = OrientMode.LookAt; AddToCollisionManager = false; Sprite = new Sprite(PlayState.ComponentManager, "Sprite", this, Matrix.CreateRotationY((float)Math.PI * 0.5f), new SpriteSheet(asset), false) { OrientationType = Sprite.OrientMode.Fixed }; Sprite.SetSingleFrameAnimation(new Point(0, 0)); Sprite sprite2 = new Sprite(PlayState.ComponentManager, "Sprite2", Sprite, Matrix.CreateRotationX((float)Math.PI * 0.5f), new SpriteSheet(asset), false) { OrientationType = Sprite.OrientMode.Fixed }; sprite2.SetSingleFrameAnimation(new Point(0, 0)); Damage = damage; HitParticles = new ParticleTrigger(hitParticles, PlayState.ComponentManager, "Hit Particles", this, Matrix.Identity, new Vector3(size * 0.5f, size * 0.5f, size * 0.5f), Vector3.Zero) { TriggerOnDeath = true, SoundToPlay = hitNoise, BoxTriggerTimes = 2 }; DamageRadius = (float)Math.Pow(size*4, 2); }
public Flammable(ComponentManager manager, string name, Body parent, Health health) : base(name, parent) { LocParent = parent; Heat = 0.0f; Flashpoint = 100.0f; Damage = 50.0f; Health = health; CheckLavaTimer = new Timer(1.0f, false); SoundTimer = new Timer(1.0f, false); DamageTimer = new Timer(1.0f, false); }
public Tree(Vector3 position, string asset, float treeSize) : base("Tree", PlayState.ComponentManager.RootComponent, Matrix.Identity, new Vector3(treeSize * 2, treeSize * 3, treeSize * 2), new Vector3(treeSize * 0.5f, treeSize * 0.25f, treeSize * 0.5f)) { HurtTimer = new Timer(1.0f, false); ComponentManager componentManager = PlayState.ComponentManager; Matrix matrix = Matrix.Identity; matrix.Translation = position; LocalTransform = matrix; new Mesh(componentManager, "Model", this, Matrix.CreateRotationY((float)(PlayState.Random.NextDouble() * Math.PI)) * Matrix.CreateScale(treeSize, treeSize, treeSize) * Matrix.CreateTranslation(new Vector3(0.7f, 0.0f, 0.7f)), asset, false); Health health = new Health(componentManager, "HP", this, 100.0f * treeSize, 0.0f, 100.0f * treeSize); new Flammable(componentManager, "Flames", this, health); Tags.Add("Vegetation"); Tags.Add("EmitsWood"); new MinimapIcon(this, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 1, 0)); Voxel voxelUnder = new Voxel(); if (PlayState.ChunkManager.ChunkData.GetFirstVoxelUnder(position, ref voxelUnder)) { new VoxelListener(componentManager, this, PlayState.ChunkManager, voxelUnder); } Inventory inventory = new Inventory("Inventory", this) { Resources = new ResourceContainer { MaxResources = (int)(treeSize * 10) } }; inventory.Resources.AddResource(new ResourceAmount() { NumResources = (int)(treeSize * 10), ResourceType = ResourceLibrary.Resources[ResourceLibrary.ResourceType.Wood] }); Particles = new ParticleTrigger("Leaves", componentManager, "LeafEmitter", this, Matrix.Identity, new Vector3(treeSize * 2, treeSize * 3, treeSize * 2), new Vector3(treeSize * 0.5f, treeSize * 0.25f, treeSize * 0.5f)) { SoundToPlay = ContentPaths.Audio.vegetation_break }; AddToCollisionManager = true; CollisionType = CollisionManager.CollisionType.Static; }
public Wheat(Vector3 position) : base("Wheat", PlayState.ComponentManager.RootComponent, Matrix.Identity, new Vector3(1.0f, 1.0f, 1.0f), Vector3.Zero) { Matrix matrix = Matrix.CreateRotationY(MathFunctions.Rand(-0.1f, 0.1f)); matrix.Translation = position + new Vector3(0.5f, -0.25f, 0.5f); LocalTransform = matrix; SpriteSheet spriteSheet = new SpriteSheet(ContentPaths.Entities.Plants.wheat); List<Point> frames = new List<Point> { new Point(0, 0) }; Animation tableAnimation = new Animation(GameState.Game.GraphicsDevice, new SpriteSheet(ContentPaths.Entities.Plants.wheat), "Wheat", 32, 32, frames, false, Color.White, 0.01f, 1.0f, 1.0f, false); Sprite sprite = new Sprite(PlayState.ComponentManager, "sprite", this, Matrix.Identity, spriteSheet, false) { OrientationType = Sprite.OrientMode.Fixed }; sprite.AddAnimation(tableAnimation); Sprite sprite2 = new Sprite(PlayState.ComponentManager, "sprite2", this, Matrix.CreateRotationY((float)Math.PI * 0.5f), spriteSheet, false) { OrientationType = Sprite.OrientMode.Fixed }; sprite2.AddAnimation(tableAnimation); Voxel voxelUnder = new Voxel(); bool success = PlayState.ChunkManager.ChunkData.GetFirstVoxelUnder(position, ref voxelUnder); if (success) { VoxelListener listener = new VoxelListener(PlayState.ComponentManager, this, PlayState.ChunkManager, voxelUnder); } Inventory inventory = new Inventory("Inventory", this) { Resources = new ResourceContainer() { MaxResources = 1, Resources = new Dictionary<ResourceLibrary.ResourceType, ResourceAmount>() { { ResourceLibrary.ResourceType.Grain, new ResourceAmount(ResourceLibrary.ResourceType.Grain) } } } }; Health health = new Health(PlayState.ComponentManager, "HP", this, 30, 0.0f, 30); new Flammable(PlayState.ComponentManager, "Flames", this, health); tableAnimation.Play(); Tags.Add("Wheat"); Tags.Add("Vegetation"); CollisionType = CollisionManager.CollisionType.Static; }
public ResourceEntity(ResourceLibrary.ResourceType resourceType, Vector3 position) : base(ResourceLibrary.ResourceNames[resourceType], PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(position), new Vector3(0.25f, 0.25f, 0.25f), Vector3.Zero, 0.5f, 0.5f, 0.999f, 0.999f, new Vector3(0, -10, 0)) { Restitution = 0.1f; Friction = 0.1f; Resource type = ResourceLibrary.Resources[resourceType]; SpriteSheet spriteSheet = new SpriteSheet(type.Image.AssetName); int frameX = type.Image.SourceRect.X / 32; int frameY = type.Image.SourceRect.Y / 32; List<Point> frames = new List<Point> { new Point(frameX, frameY) }; Animation animation = new Animation(GameState.Game.GraphicsDevice, new SpriteSheet(type.Image.AssetName), "Animation", 32, 32, frames, false, Color.White, 0.01f, 0.75f, 0.75f, false); Sprite sprite = new Sprite(PlayState.ComponentManager, "Sprite", this, Matrix.CreateTranslation(Vector3.UnitY * 0.25f), spriteSheet, false) { OrientationType = Sprite.OrientMode.Spherical, LightsWithVoxels = !type.SelfIlluminating }; sprite.AddAnimation(animation); animation.Play(); Tags.Add(type.ResourceName); Tags.Add("Resource"); Bobber bobber = new Bobber(0.05f, 2.0f, MathFunctions.Rand() * 3.0f, sprite); if (type.IsFlammable) { Health health = new Health(PlayState.ComponentManager, "health", this, 10.0f, 0.0f, 10.0f); new Flammable(PlayState.ComponentManager, "Flames", this, health); } }
public bool Perform(Creature performer, Body other, DwarfTime time, float bonus, Vector3 pos, string faction) { switch (TriggerMode) { case AttackTrigger.Timer: RechargeTimer.Update(time); if (!RechargeTimer.HasTriggered) { return(false); } break; case AttackTrigger.Animation: if (performer.Sprite.CurrentAnimation == null || performer.Sprite.CurrentAnimation.CurrentFrame != TriggerFrame) { return(false); } break; } switch (Mode) { case AttackMode.Melee: { Health health = other.GetRootComponent().GetChildrenOfType <Health>(true).FirstOrDefault(); if (health != null) { health.Damage(DamageAmount + bonus); } PlayNoise(other.LocalTransform.Translation); if (HitParticles != "") { PlayState.ParticleManager.Trigger(HitParticles, other.LocalTransform.Translation, Color.White, 5); } if (HitAnimation != null) { HitAnimation.Reset(); HitAnimation.Play(); IndicatorManager.DrawIndicator(HitAnimation, other.BoundingBox.Center(), 0.6f, 2.0f, MathFunctions.RandVector2Circle(), Color.White, MathFunctions.Rand() > 0.5f); } Physics physics = other as Physics; if (physics != null) { Vector3 force = other.Position - pos; force.Normalize(); physics.ApplyForce(force * Knockback, 1.0f); } break; } case AttackMode.Ranged: { PlayNoise(other.LocalTransform.Translation); LaunchProjectile(pos, other.Position, other); break; } } return(true); }