public BearTrap(Vector3 pos) : base("BearTrap", PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(pos), new Vector3(1.0f, 1.0f, 1.0f), Vector3.Zero, true) { Allies = PlayState.PlayerFaction; Sensor = new Sensor("Sensor", this, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), Vector3.Zero) { FireTimer = new Timer(0.5f, false) }; Sensor.OnSensed += Sensor_OnSensed; DeathTimer = new Timer(0.6f, true); DeathParticles = new ParticleTrigger("puff", PlayState.ComponentManager, "DeathParticles", this, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), Vector3.Zero) { SoundToPlay = "" }; DamageAmount = 200; Voxel voxUnder = new Voxel(); PlayState.ChunkManager.ChunkData.GetFirstVoxelUnder(pos, ref voxUnder); VoxListener = new VoxelListener(PlayState.ComponentManager, this, PlayState.ChunkManager, voxUnder); Sprite = new Sprite(PlayState.ComponentManager, "Sprite", this, Matrix.Identity, new SpriteSheet(ContentPaths.Entities.DwarfObjects.beartrap), false); Sprite.AddAnimation(new Animation(0, ContentPaths.Entities.DwarfObjects.beartrap, 32, 32, 0) {Name = IdleAnimation}); Sprite.AddAnimation(new Animation(1, ContentPaths.Entities.DwarfObjects.beartrap, 32, 32, 0, 1, 2, 3) {Name = TriggerAnimation, Speeds = new List<float>() {6.6f}, Loops = true}); }
public Projectile(Vector3 position, Vector3 initialVelocity, Health.DamageAmount damage, float size, string asset, string hitParticles, string hitNoise, Body target) : 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)) { Target = target; HitAnimation = null; IsSleeping = false; Velocity = initialVelocity; Orientation = OrientMode.LookAt; AddToCollisionManager = false; CollideMode = Physics.CollisionMode.None; 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)); 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 TurretTrap(ComponentManager manager, Vector3 position, Faction faction) : base(manager, "TurretTrap", manager.RootComponent, Matrix.CreateTranslation(position), new Vector3(1.0f, 1.0f, 1.0f), Vector3.Zero, true) { Allies = faction; SpriteSheet spriteSheet = new SpriteSheet(ContentPaths.Entities.Furniture.interior_furniture, 32, 32); Weapon = new Attack("BowAttack", 5.0f, 1.0f, 5.0f, ContentPaths.Audio.trap, ContentPaths.Effects.pierce) { ProjectileType = "Arrow", Mode = Attack.AttackMode.Ranged, LaunchSpeed = 15 }; ParticleTrigger deathParticles = new ParticleTrigger("puff", Manager, "DeathParticles", this, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), Vector3.Zero) { SoundToPlay = "" }; Health health = new Health(Manager, "health", this, 50.0f, 0.0f, 50.0f); Sensor = new EnemySensor(Manager, "sensor", this, Matrix.Identity, new Vector3(8, 8, 8), Vector3.Zero) { Allies = faction }; Sensor.OnEnemySensed += Sensor_OnEnemySensed; BaseSprite = new Fixture(Vector3.Zero, spriteSheet, new Point(2, 7), this); BaseSprite.Sprite.OrientationType = Sprite.OrientMode.YAxis; TurretSprite = new Fixture(Vector3.Up * 0.25f, spriteSheet, new Point(1, 7), this); TurretSprite.Sprite.OrientationType = Sprite.OrientMode.Fixed; SetTurretAngle(0.0f); }
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)) { Seedlingsheet = new SpriteSheet(ContentPaths.Entities.Plants.vine, 32, 32); SeedlingFrame = new Point(0, 0); 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 BearTrap(Vector3 pos) : base( "BearTrap", PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(pos), new Vector3(1.0f, 1.0f, 1.0f), Vector3.Zero, true) { Allies = "Dwarf"; Sensor = new Sensor("Sensor", this, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), Vector3.Zero) { FireTimer = new Timer(0.5f, false) }; Sensor.OnSensed += Sensor_OnSensed; DeathTimer = new Timer(0.6f, true); DeathParticles = new ParticleTrigger("puff", PlayState.ComponentManager, "DeathParticles", this, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), Vector3.Zero) { SoundToPlay = "" }; DamageAmount = 200; Voxel voxUnder = new Voxel(); PlayState.ChunkManager.ChunkData.GetFirstVoxelUnder(pos, ref voxUnder); VoxListener = new VoxelListener(PlayState.ComponentManager, this, PlayState.ChunkManager, voxUnder); Sprite = new Sprite(PlayState.ComponentManager, "Sprite", this, Matrix.Identity, new SpriteSheet(ContentPaths.Entities.DwarfObjects.beartrap), false); Sprite.AddAnimation(new Animation(0, ContentPaths.Entities.DwarfObjects.beartrap, 32, 32, 0) { Name = IdleAnimation }); Sprite.AddAnimation(new Animation(1, ContentPaths.Entities.DwarfObjects.beartrap, 32, 32, 0, 1, 2, 3) { Name = TriggerAnimation, Speeds = new List <float>() { 6.6f }, Loops = true }); }
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 void Initialize(SpriteSheet spriteSheet) { Physics.Orientation = Physics.OrientMode.RotateY; const int frameWidth = 48; const int frameHeight = 40; Sprite = new CharacterSprite (Graphics, Manager, "Deer Sprite", Physics, Matrix.CreateTranslation(Vector3.Up * 0.6f) ); // Add the idle animation Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 0, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 1, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 2, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 3, 0); // Add the running animation Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 4, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 5, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 6, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 7, 0, 1, 2, 3); // Add the jumping animation Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 8, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 9, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 10, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 11, 0, 1); // Add hands Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); // Add sensor Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); // Add AI AI = new DeerAI(this, "Deer AI", Sensors, PlanService); Attacks = new List<Attack>{new Attack("None", 0.0f, 0.0f, 0.0f, ContentPaths.Audio.pick, ContentPaths.Effects.flash)}; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 1 } }; // Shadow Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -.25f, 0.0f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); List<Point> shP = new List<Point> { new Point(0,0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); // The bird will emit a shower of blood when it dies DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10 }; // The bird is flammable, and can die when exposed to fire. Flames = new Flammable(Manager, "Flames", Physics, this); // Tag the physics component with some information // that can be used later Physics.Tags.Add("Deer"); Physics.Tags.Add("Animal"); Stats.FullName = TextGenerator.GenerateRandom("$firstname"); Stats.CurrentClass = new EmployeeClass() { Name = "Deer", Levels = new List<EmployeeClass.Level>() { new EmployeeClass.Level() { Index = 0, Name = "Deer"} } }; }
/// <summary> /// Initialize function creates all the required components for the bird. /// </summary> /// <param name="spriteSheet">The sprite sheet to use for the bird</param> public void Initialize(string sprites) { // When true, causes the bird to face the direction its moving in Physics.Orientation = Physics.OrientMode.RotateY; // Create the sprite component for the bird. Sprite = new CharacterSprite (Graphics, Manager, "Frog Sprite", Physics, Matrix.CreateTranslation(0, 0.5f, 0) ); CompositeAnimation.Descriptor descriptor = FileUtils.LoadJsonFromString <CompositeAnimation.Descriptor>( ContentPaths.GetFileAsString(sprites)); List <CompositeAnimation> animations = descriptor.GenerateAnimations("Rabbit"); foreach (CompositeAnimation animation in animations) { Sprite.AddAnimation(animation); } // Used to grab other components Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.2f, 0.2f, 0.2f), Vector3.Zero); // Used to sense hostile creatures Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); // Controls the behavior of the creature AI = new CreatureAI(this, "Rabbit AI", Sensors, PlanService); // The bird can peck at its enemies (0.1 damage) Attacks = new List <Attack> { new Attack("Bite", 0.01f, 2.0f, 1.0f, ContentPaths.Audio.frog, ContentPaths.Effects.flash) }; // The bird can hold one item at a time in its inventory Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 1 } }; // The shadow is rotated 90 degrees along X, and is 0.25 blocks beneath the creature Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.25f, 0.0f); shadowTransform *= Matrix.CreateScale(0.75f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); // We set up the shadow's animation so that it's just a static black circle // TODO: Make the shadow set this up automatically List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); // The bird will emit a shower of blood when it dies DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1 }; // The bird is flammable, and can die when exposed to fire. Flames = new Flammable(Manager, "Flames", Physics, this); // Tag the physics component with some information // that can be used later Physics.Tags.Add("Frog"); Physics.Tags.Add("Animal"); Stats.FullName = TextGenerator.GenerateRandom("$firstname") + " the frog"; Stats.CurrentClass = new EmployeeClass() { Name = "Frog", Levels = new List <EmployeeClass.Level>() { new EmployeeClass.Level() { Index = 0, Name = "Frog" } } }; NoiseMaker.Noises.Add("Idle", new List <string>() { ContentPaths.Audio.frog }); NoiseMaker.Noises.Add("Hurt", new List <string>() { ContentPaths.Audio.frog }); }
public void Initialize() { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Goblin Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.1f, 0))); foreach (Animation animation in Stats.CurrentClass.Animations) { Sprite.AddAnimation(animation.Clone()); } HasMeat = false; HasBones = false; Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Goblin AI", Sensors, PlanService); Attacks = new List <Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 16 } }; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Goblin"); DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 3, SoundToPlay = ContentPaths.Entities.Goblin.Audio.goblinhurt1 }; Flames = new Flammable(Manager, "Flames", Physics, this); NoiseMaker.Noises["Hurt"] = new List <string> { ContentPaths.Entities.Goblin.Audio.goblinhurt1, ContentPaths.Entities.Goblin.Audio.goblinhurt2, ContentPaths.Entities.Goblin.Audio.goblinhurt3, ContentPaths.Entities.Goblin.Audio.goblinhurt4, }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 3, 0)); NoiseMaker.Noises["Chew"] = new List <string> { ContentPaths.Audio.chew }; NoiseMaker.Noises["Jump"] = new List <string> { ContentPaths.Audio.jump }; Stats.FullName = TextGenerator.GenerateRandom("$goblinname"); //Stats.LastName = TextGenerator.GenerateRandom("$goblinfamily"); Stats.Size = 4; }
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 void Initialize() { HasMeat = false; HasBones = false; Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "MudGolem Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.35f, 0))); foreach (Animation animation in Stats.CurrentClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new MudGolemAI(this, Sensors, Manager.World.PlanService) { Movement = { IsSessile = true, CanFly = false, CanSwim = false, CanWalk = false, CanClimb = false, CanClimbWalls = false } }; Attacks = new List <Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 16 } }; var gems = ResourceLibrary.GetResourcesByTag(Resource.ResourceTags.Gem); for (int i = 0; i < 16; i++) { int num = MathFunctions.RandInt(1, 32 - i); Inventory.Resources.AddResource(new ResourceAmount(Datastructures.SelectRandom(gems), num)); i += num - 1; } Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Physics.Tags.Add("MudGolem"); Physics.Mass = 100; DeathParticleTrigger = new ParticleTrigger("dirt_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 5, SoundToPlay = ContentPaths.Audio.gravel }; NoiseMaker.Noises["Hurt"] = new List <string> { ContentPaths.Audio.demon0, ContentPaths.Audio.gravel, }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new NamedImageFrame(ContentPaths.GUI.map_icons, 16, 3, 0)); NoiseMaker.Noises["Chew"] = new List <string> { ContentPaths.Audio.chew }; Stats.FullName = TextGenerator.GenerateRandom("$goblinname"); //Stats.LastName = TextGenerator.GenerateRandom("$elffamily"); Stats.Size = 4; Resistances[DamageType.Fire] = 5; Resistances[DamageType.Acid] = 5; Resistances[DamageType.Cold] = 5; }
/// <summary> /// Initialize function creates all the required components for the bird. /// </summary> /// <param name="spriteSheet">The sprite sheet to use for the bird</param> public void Initialize(SpriteSheet spriteSheet) { // When true, causes the bird to face the direction its moving in Physics.Orientation = Physics.OrientMode.RotateY; // The dimensions of each frame in the sprite sheet (in pixels), as given by the readme const int frameWidth = 24; const int frameHeight = 16; // Create the sprite component for the bird. Sprite = new CharacterSprite (Graphics, Manager, "Bird Sprite", Physics, Matrix.CreateTranslation(0, 0.25f, 0) ); // Flying animation (rows 4 5 6 and 7) Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Forward, spriteSheet, // animation will play at 15 FPS 15.0f, frameWidth, frameHeight, // animation begins at row 4 4, // It consists of columns 0, 1 and 2 looped forever 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Left, spriteSheet, 15.0f, frameWidth, frameHeight, 5, 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Right, spriteSheet, 15.0f, frameWidth, frameHeight, 6, 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Backward, spriteSheet, 15.0f, frameWidth, frameHeight, 7, 0, 1, 2); // Hopping animation (rows 0 1 2 and 3) Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Forward, spriteSheet, 5.0f, frameWidth, frameHeight, 0, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Left, spriteSheet, 5.0f, frameWidth, frameHeight, 1, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Right, spriteSheet, 5.0f, frameWidth, frameHeight, 2, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Backward, spriteSheet, 5.0f, frameWidth, frameHeight, 3, 0, 1); // Idle animation (rows 0 1 2 and 3) Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Forward, spriteSheet, 5.0f, frameWidth, frameHeight, 0, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Left, spriteSheet, 5.0f, frameWidth, frameHeight, 1, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Right, spriteSheet, 5.0f, frameWidth, frameHeight, 2, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Backward, spriteSheet, 5.0f, frameWidth, frameHeight, 3, 0); // Used to grab other components Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); // Used to sense hostile creatures Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); // Controls the behavior of the creature AI = new BirdAI(this, "Bird AI", Sensors, PlanService); // The bird can peck at its enemies (0.1 damage) Attacks = new List<Attack>{new Attack("Peck", 0.1f, 2.0f, 1.0f, ContentPaths.Audio.pick, ContentPaths.Effects.flash)}; // The bird can hold one item at a time in its inventory Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 1 } }; // The shadow is rotated 90 degrees along X, and is 0.25 blocks beneath the creature Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.25f, 0.0f); shadowTransform *= Matrix.CreateScale(0.75f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); // We set up the shadow's animation so that it's just a static black circle // TODO: Make the shadow set this up automatically List<Point> shP = new List<Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); // The bird will emit a shower of blood when it dies DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1 }; // The bird is flammable, and can die when exposed to fire. Flames = new Flammable(Manager, "Flames", Physics, this); // Tag the physics component with some information // that can be used later Physics.Tags.Add("Bird"); Physics.Tags.Add("Animal"); NoiseMaker.Noises.Add("chirp", new List<string>(){ContentPaths.Audio.bird}); Stats.FullName = TextGenerator.GenerateRandom("$firstname") + " the bird"; Stats.CurrentClass = new EmployeeClass() { Name = "Bird", Levels = new List<EmployeeClass.Level>() { new EmployeeClass.Level() { Index = 0, Name = "Bird" } } }; }
public void Initialize(EmployeeClass dwarfClass) { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Dwarf Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.15f, 0))); foreach (Animation animation in dwarfClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Sprite.SpriteSheet = Sprite.Animations.First().Value.SpriteSheet; Sprite.CurrentAnimation = Sprite.Animations.First().Value; Sprite.CurrentAnimation.NextFrame(); Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Dwarf AI", Sensors, PlanService); Attacks = new List<Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 128 } }; Matrix shadowTransform = Matrix.CreateRotationX((float) Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)) { GlobalScale = 1.25f }; List<Point> shP = new List<Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Dwarf"); DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10, SoundToPlay = ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, }; Flames = new Flammable(Manager, "Flames", Physics, this); NoiseMaker.Noises["Hurt"] = new List<string> { ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, ContentPaths.Entities.Dwarf.Audio.dwarfhurt2, ContentPaths.Entities.Dwarf.Audio.dwarfhurt3, ContentPaths.Entities.Dwarf.Audio.dwarfhurt4, }; NoiseMaker.Noises["Chew"] = new List<string> { ContentPaths.Audio.chew }; NoiseMaker.Noises["Jump"] = new List<string> { ContentPaths.Audio.jump }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 0, 0)); Stats.FullName = TextGenerator.GenerateRandom("$firstname", " ", "$lastname"); Stats.Size = 5; Stats.CanSleep = true; Stats.CanEat = true; AI.TriggersMourning = true; }
public Projectile(ComponentManager manager, Vector3 position, Vector3 initialVelocity, Health.DamageAmount damage, float size, string asset, string hitParticles, string hitNoise, Body target, bool animated = false, bool singleSprite = false) : base("Projectile", manager.RootComponent, Matrix.CreateTranslation(position), new Vector3(size, size, size), Vector3.One, 1.0f, 1.0f, 1.0f, 1.0f, new Vector3(0, -10, 0)) { Target = target; HitAnimation = null; IsSleeping = false; Velocity = initialVelocity; Orientation = OrientMode.LookAt; AddToCollisionManager = false; CollideMode = Physics.CollisionMode.None; var spriteSheet = new SpriteSheet(asset); if (animated) { spriteSheet.FrameWidth = Math.Min(spriteSheet.FrameWidth, spriteSheet.FrameHeight); spriteSheet.FrameHeight = spriteSheet.FrameWidth; } Sprite = new Sprite(manager, "Sprite", this, Matrix.CreateRotationY((float)Math.PI * 0.5f), spriteSheet, false) { OrientationType = Sprite.OrientMode.Fixed }; if (animated) { Sprite.SetSimpleAnimation(); Sprite.CurrentAnimation.Play(); } else { Sprite.SetSingleFrameAnimation(); } if (singleSprite) { this.Sprite.OrientationType = Sprite.OrientMode.Spherical; } if (!singleSprite) { Sprite2 = new Sprite(manager, "Sprite2", Sprite, Matrix.CreateRotationX((float)Math.PI * 0.5f), spriteSheet, false) { OrientationType = Sprite.OrientMode.Fixed }; if (animated) { Sprite2.SetSimpleAnimation(); } else { Sprite2.SetSingleFrameAnimation(); } } Damage = damage; HitParticles = new ParticleTrigger(hitParticles, manager, "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 Creature(Vector3 pos, CreatureDef def, string creatureClass, int creatureLevel, string faction) : this(new CreatureStats(EmployeeClass.Classes[creatureClass], creatureLevel), faction, PlayState.PlanService, PlayState.ComponentManager.Factions.Factions[faction], new Physics(def.Name, PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(pos), def.Size, new Vector3(0, -def.Size.Y * 0.5f, 0), def.Mass, 1.0f, 0.999f, 0.999f, Vector3.UnitY * -10, Physics.OrientMode.RotateY), PlayState.ChunkManager, GameState.Game.GraphicsDevice, GameState.Game.Content, def.Name) { EmployeeClass employeeClass = EmployeeClass.Classes[creatureClass]; Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Sprite", Physics, Matrix.CreateTranslation(def.SpriteOffset)); foreach (Animation animation in employeeClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, def.SenseRange, Vector3.Zero); AI = new CreatureAI(this, "AI", Sensors, PlanService); Attacks = new List<Attack>(); foreach (Attack attack in employeeClass.Attacks) { Attacks.Add(new Attack(attack)); } Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = def.InventorySize } }; if (def.HasShadow) { Matrix shadowTransform = Matrix.CreateRotationX((float) Math.PI*0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)) { GlobalScale = def.ShadowScale }; List<Point> shP = new List<Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); } Physics.Tags.AddRange(def.Tags); DeathParticleTrigger = new ParticleTrigger(def.BloodParticle, Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10, SoundToPlay = ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, }; if (def.IsFlammable) { Flames = new Flammable(Manager, "Flames", Physics, this); } NoiseMaker.Noises["Hurt"] = def.HurtSounds; NoiseMaker.Noises["Chew"] = new List<string>() {def.ChewSound}; NoiseMaker.Noises["Jump"] = new List<string>() {def.JumpSound}; MinimapIcon minimapIcon = new MinimapIcon(Physics, def.MinimapIcon); Stats.FullName = TextGenerator.GenerateRandom(PlayState.ComponentManager.Factions.Races[def.Race].NameTemplates); Stats.CanSleep = def.CanSleep; Stats.CanEat = def.CanEat; AI.TriggersMourning = def.TriggersMourning; }
/// <summary> /// Initialize function creates all the required components for the bird. /// </summary> /// <param name="spriteSheet">The sprite sheet to use for the bird</param> public void Initialize(SpriteSheet spriteSheet) { // When true, causes the bird to face the direction its moving in Physics.Orientation = Physics.OrientMode.RotateY; // The dimensions of each frame in the sprite sheet (in pixels), as given by the readme const int frameWidth = 24; const int frameHeight = 16; // Create the sprite component for the bird. Sprite = new CharacterSprite (Graphics, Manager, "Bird Sprite", Physics, Matrix.CreateTranslation(0, 0.25f, 0) ); // Flying animation (rows 4 5 6 and 7) Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Forward, spriteSheet, // animation will play at 15 FPS 15.0f, frameWidth, frameHeight, // animation begins at row 4 4, // It consists of columns 0, 1 and 2 looped forever 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Left, spriteSheet, 15.0f, frameWidth, frameHeight, 5, 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Right, spriteSheet, 15.0f, frameWidth, frameHeight, 6, 0, 1, 2); Sprite.AddAnimation(CharacterMode.Flying, OrientedAnimation.Orientation.Backward, spriteSheet, 15.0f, frameWidth, frameHeight, 7, 0, 1, 2); // Hopping animation (rows 0 1 2 and 3) Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Forward, spriteSheet, 5.0f, frameWidth, frameHeight, 0, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Left, spriteSheet, 5.0f, frameWidth, frameHeight, 1, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Right, spriteSheet, 5.0f, frameWidth, frameHeight, 2, 0, 1); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Backward, spriteSheet, 5.0f, frameWidth, frameHeight, 3, 0, 1); // Idle animation (rows 0 1 2 and 3) Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Forward, spriteSheet, 5.0f, frameWidth, frameHeight, 0, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Left, spriteSheet, 5.0f, frameWidth, frameHeight, 1, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Right, spriteSheet, 5.0f, frameWidth, frameHeight, 2, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Backward, spriteSheet, 5.0f, frameWidth, frameHeight, 3, 0); // Used to grab other components Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); // Used to sense hostile creatures Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); // Controls the behavior of the creature AI = new BirdAI(this, "Bird AI", Sensors, PlanService); // The bird can peck at its enemies (0.1 damage) Attacks = new List <Attack> { new Attack("Peck", 0.1f, 2.0f, 1.0f, ContentPaths.Audio.pick, ContentPaths.Effects.flash) }; // The bird can hold one item at a time in its inventory Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 1 } }; // The shadow is rotated 90 degrees along X, and is 0.25 blocks beneath the creature Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.25f, 0.0f); shadowTransform *= Matrix.CreateScale(0.75f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); // We set up the shadow's animation so that it's just a static black circle // TODO: Make the shadow set this up automatically List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); // The bird will emit a shower of blood when it dies DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1 }; // The bird is flammable, and can die when exposed to fire. Flames = new Flammable(Manager, "Flames", Physics, this); // Tag the physics component with some information // that can be used later Physics.Tags.Add("Bird"); Physics.Tags.Add("Animal"); NoiseMaker.Noises.Add("chirp", new List <string>() { ContentPaths.Audio.bird }); Stats.FullName = TextGenerator.GenerateRandom("$firstname") + " the bird"; Stats.CurrentClass = new EmployeeClass() { Name = "Bird", Levels = new List <EmployeeClass.Level>() { new EmployeeClass.Level() { Index = 0, Name = "Bird" } } }; }
public void Initialize() { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Elf Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.35f, 0))); foreach (Animation animation in Stats.CurrentClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Elf AI", Sensors, PlanService); Attacks = new List<Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 16 } }; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); List<Point> shP = new List<Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Goblin"); DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 5, SoundToPlay = ContentPaths.Entities.Goblin.Audio.goblinhurt1 }; Flames = new Flammable(Manager, "Flames", Physics, this); NoiseMaker.Noises["Hurt"] = new List<string> { ContentPaths.Entities.Goblin.Audio.goblinhurt1, ContentPaths.Entities.Goblin.Audio.goblinhurt2, ContentPaths.Entities.Goblin.Audio.goblinhurt3, ContentPaths.Entities.Goblin.Audio.goblinhurt4, }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 3, 0)); NoiseMaker.Noises["Chew"] = new List<string> { ContentPaths.Audio.chew }; NoiseMaker.Noises["Jump"] = new List<string> { ContentPaths.Audio.jump }; Stats.FullName = TextGenerator.GenerateRandom("$elfname"); //Stats.LastName = TextGenerator.GenerateRandom("$elffamily"); Stats.Size = 4; }
public void Initialize(EmployeeClass dwarfClass) { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Fairy Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.5f, 0))); foreach (Animation animation in dwarfClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Sprite.LightsWithVoxels = false; Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Fairy AI", Sensors, PlanService); Attacks = new List <Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 128 } }; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)); List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Dwarf"); DeathParticleTrigger = new ParticleTrigger("star_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 5, SoundToPlay = ContentPaths.Audio.wurp, }; NoiseMaker.Noises["Hurt"] = new List <string> { ContentPaths.Audio.tinkle }; NoiseMaker.Noises["Chew"] = new List <string> { ContentPaths.Audio.tinkle }; NoiseMaker.Noises["Jump"] = new List <string> { ContentPaths.Audio.tinkle }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 0, 0)); //new LightEmitter("Light Emitter", Sprite, Matrix.Identity, Vector3.One, Vector3.One, 255, 150); new Bobber(0.25f, 3.0f, MathFunctions.Rand(), Sprite); Stats.FullName = TextGenerator.GenerateRandom("$firstname"); //Stats.LastName = "The Fairy"; Stats.CanSleep = false; Stats.CanEat = false; }
public void Initialize(EmployeeClass dwarfClass) { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Dwarf Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.15f, 0))); foreach (Animation animation in dwarfClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Sprite.SpriteSheet = Sprite.Animations.First().Value.SpriteSheet; Sprite.CurrentAnimation = Sprite.Animations.First().Value; Sprite.CurrentAnimation.NextFrame(); Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Dwarf AI", Sensors, PlanService); Attacks = new List <Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 128 } }; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)) { GlobalScale = 1.25f }; List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Dwarf"); DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10, SoundToPlay = ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, }; Flames = new Flammable(Manager, "Flames", Physics, this); NoiseMaker.Noises["Hurt"] = new List <string> { ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, ContentPaths.Entities.Dwarf.Audio.dwarfhurt2, ContentPaths.Entities.Dwarf.Audio.dwarfhurt3, ContentPaths.Entities.Dwarf.Audio.dwarfhurt4, }; NoiseMaker.Noises["Ok"] = new List <string>() { ContentPaths.Audio.ok0, ContentPaths.Audio.ok1, ContentPaths.Audio.ok2 }; NoiseMaker.Noises["Chew"] = new List <string> { ContentPaths.Audio.chew }; NoiseMaker.Noises["Jump"] = new List <string> { ContentPaths.Audio.jump }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 0, 0)); Stats.FullName = TextGenerator.GenerateRandom("$firstname", " ", "$lastname"); Stats.Size = 5; Stats.CanSleep = true; Stats.CanEat = true; AI.Movement.CanClimbWalls = true; AI.Movement.SetCost(MoveType.ClimbWalls, 50.0f); AI.Movement.SetSpeed(MoveType.ClimbWalls, 0.15f); AI.TriggersMourning = true; }
public void Initialize(SpriteSheet spriteSheet) { Physics.Orientation = Physics.OrientMode.RotateY; const int frameWidth = 48; const int frameHeight = 40; Sprite = new CharacterSprite (Graphics, Manager, "Deer Sprite", Physics, Matrix.CreateTranslation(Vector3.Up * 0.6f) ); // Add the idle animation Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 0, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 1, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 2, 0); Sprite.AddAnimation(CharacterMode.Idle, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 3, 0); // Add the running animation Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 4, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 5, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 6, 0, 1, 2, 3); Sprite.AddAnimation(CharacterMode.Walking, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 7, 0, 1, 2, 3); // Add the jumping animation Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Forward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 8, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Left, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 9, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Right, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 10, 0, 1); Sprite.AddAnimation(CharacterMode.Jumping, OrientedAnimation.Orientation.Backward, spriteSheet, ANIM_SPEED, frameWidth, frameHeight, 11, 0, 1); // Add hands Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); // Add sensor Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); // Add AI AI = new DeerAI(this, "Deer AI", Sensors, PlanService); Attacks = new List <Attack> { new Attack("None", 0.0f, 0.0f, 0.0f, ContentPaths.Audio.pick, ContentPaths.Effects.flash) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 1 } }; // Shadow Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -.25f, 0.0f); SpriteSheet shadowTexture = new SpriteSheet(ContentPaths.Effects.shadowcircle); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, shadowTexture); List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); // The bird will emit a shower of blood when it dies DeathParticleTrigger = new ParticleTrigger("blood_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10 }; // The bird is flammable, and can die when exposed to fire. Flames = new Flammable(Manager, "Flames", Physics, this); // Tag the physics component with some information // that can be used later Physics.Tags.Add("Deer"); Physics.Tags.Add("Animal"); Stats.FullName = TextGenerator.GenerateRandom("$firstname"); Stats.CurrentClass = new EmployeeClass() { Name = "Deer", Levels = new List <EmployeeClass.Level>() { new EmployeeClass.Level() { Index = 0, Name = "Deer" } } }; }
public Creature(Vector3 pos, CreatureDef def, string creatureClass, int creatureLevel, string faction) : this(new CreatureStats(EmployeeClass.Classes[creatureClass], creatureLevel), faction, PlayState.PlanService, PlayState.ComponentManager.Factions.Factions[faction], new Physics(def.Name, PlayState.ComponentManager.RootComponent, Matrix.CreateTranslation(pos), def.Size, new Vector3(0, -def.Size.Y * 0.5f, 0), def.Mass, 1.0f, 0.999f, 0.999f, Vector3.UnitY * -10, Physics.OrientMode.RotateY), PlayState.ChunkManager, GameState.Game.GraphicsDevice, GameState.Game.Content, def.Name) { HasMeat = true; HasBones = true; EmployeeClass employeeClass = EmployeeClass.Classes[creatureClass]; Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Sprite", Physics, Matrix.CreateTranslation(def.SpriteOffset)); foreach (Animation animation in employeeClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, def.SenseRange, Vector3.Zero); AI = new CreatureAI(this, "AI", Sensors, PlanService); Attacks = new List <Attack>(); foreach (Attack attack in employeeClass.Attacks) { Attacks.Add(new Attack(attack)); } Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = def.InventorySize } }; if (def.HasShadow) { Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)) { GlobalScale = def.ShadowScale }; List <Point> shP = new List <Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); } Physics.Tags.AddRange(def.Tags); DeathParticleTrigger = new ParticleTrigger(def.BloodParticle, Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 1, BoxTriggerTimes = 10, SoundToPlay = ContentPaths.Entities.Dwarf.Audio.dwarfhurt1, }; if (def.IsFlammable) { Flames = new Flammable(Manager, "Flames", Physics, this); } NoiseMaker.Noises["Hurt"] = def.HurtSounds; NoiseMaker.Noises["Chew"] = new List <string>() { def.ChewSound }; NoiseMaker.Noises["Jump"] = new List <string>() { def.JumpSound }; MinimapIcon minimapIcon = new MinimapIcon(Physics, def.MinimapIcon); Stats.FullName = TextGenerator.GenerateRandom(PlayState.ComponentManager.Factions.Races[def.Race].NameTemplates); Stats.CanSleep = def.CanSleep; Stats.CanEat = def.CanEat; AI.TriggersMourning = def.TriggersMourning; }
public void Initialize(EmployeeClass dwarfClass) { Physics.Orientation = Physics.OrientMode.RotateY; Sprite = new CharacterSprite(Graphics, Manager, "Fairy Sprite", Physics, Matrix.CreateTranslation(new Vector3(0, 0.5f, 0))); foreach (Animation animation in dwarfClass.Animations) { Sprite.AddAnimation(animation.Clone()); } Sprite.LightsWithVoxels = false; Hands = new Grabber("hands", Physics, Matrix.Identity, new Vector3(0.1f, 0.1f, 0.1f), Vector3.Zero); Sensors = new EnemySensor(Manager, "EnemySensor", Physics, Matrix.Identity, new Vector3(20, 5, 20), Vector3.Zero); AI = new CreatureAI(this, "Fairy AI", Sensors, PlanService); Attacks = new List<Attack>() { new Attack(Stats.CurrentClass.Attacks[0]) }; Inventory = new Inventory("Inventory", Physics) { Resources = new ResourceContainer { MaxResources = 128 } }; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); shadowTransform.Translation = new Vector3(0.0f, -0.5f, 0.0f); Shadow = new Shadow(Manager, "Shadow", Physics, shadowTransform, new SpriteSheet(ContentPaths.Effects.shadowcircle)); List<Point> shP = new List<Point> { new Point(0, 0) }; Animation shadowAnimation = new Animation(Graphics, new SpriteSheet(ContentPaths.Effects.shadowcircle), "sh", 32, 32, shP, false, Color.Black, 1, 0.7f, 0.7f, false); Shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); Shadow.SetCurrentAnimation("sh"); Physics.Tags.Add("Dwarf"); DeathParticleTrigger = new ParticleTrigger("star_particle", Manager, "Death Gibs", Physics, Matrix.Identity, Vector3.One, Vector3.Zero) { TriggerOnDeath = true, TriggerAmount = 5, SoundToPlay = ContentPaths.Audio.wurp, }; NoiseMaker.Noises["Hurt"] = new List<string> { ContentPaths.Audio.tinkle }; NoiseMaker.Noises["Chew"] = new List<string> { ContentPaths.Audio.tinkle }; NoiseMaker.Noises["Jump"] = new List<string> { ContentPaths.Audio.tinkle }; MinimapIcon minimapIcon = new MinimapIcon(Physics, new ImageFrame(TextureManager.GetTexture(ContentPaths.GUI.map_icons), 16, 0, 0)); //new LightEmitter("Light Emitter", Sprite, Matrix.Identity, Vector3.One, Vector3.One, 255, 150); new Bobber(0.25f, 3.0f, MathFunctions.Rand(), Sprite); Stats.FullName = TextGenerator.GenerateRandom("$firstname"); //Stats.LastName = "The Fairy"; Stats.CanSleep = false; Stats.CanEat = false; }