public override void OnEnter() { dorfs = new List<Person>(); players = new List<Player>(); aiPlayers = new List<Player>(); hospitals = new List<Hospital>() ; Bloom = new BloomPostprocess.BloomComponent(Game); Bloom.Initialize(); Bloom.Settings = BloomPostprocess.BloomSettings.PresetSettings[5]; IsInitialized = true; MapHeight = 40; MapWidth = 40; Player.defib = new Player.defibCallbackType(defib); online = false; // DO NOT CHANGE, offline mode is now detected when server connection is refused SoundManager.Content = Game.Content; Camera = new OrbitCamera(Game.GraphicsDevice, 0, 0, 0.001f, new Vector3(0, 15, 0), new Vector3(-10, 10, 0), (float)Math.PI * 0.25f, Game.GraphicsDevice.Viewport.AspectRatio, 0.1f, 1000.0f); ComponentManager = new ComponentManager(); ComponentManager.RootComponent = new LocatableComponent(ComponentManager, "root", null, Matrix.Identity, Vector3.Zero, Vector3.Zero); notification = null; particles = new ParticleManager(ComponentManager); EmitterData testData = new EmitterData(); testData.AngularDamping = 1.0f; List<Point> frm = new List<Point>(); frm.Add(new Point(0, 0)); frm.Add(new Point(1, 0)); frm.Add(new Point(0, 1)); frm.Add(new Point(1, 1)); testData.Animation = new Animation(Game.GraphicsDevice, Game.Content.Load<Texture2D>("electricity"), "electricity", 32, 32, frm, true, Color.White, 20f, 1.0f, 1.0f, false); testData.ConstantAccel = new Vector3(0, -1, 0); testData.LinearDamping = 0.9f; testData.AngularDamping = 0.9f; testData.EmissionFrequency = 1.0f; testData.EmissionRadius = 1.0f; testData.EmissionSpeed = 20.0f; testData.GrowthSpeed = -0.9f; testData.MaxAngle = 3.14159f; testData.MinAngle = 0.0f; testData.MaxParticles = 1000; testData.MaxScale = 1.0f; testData.MinScale = 0.1f; testData.MinAngular = -5.0f; testData.MaxAngular = 5.0f; testData.ParticleDecay = 0.1f; testData.ParticlesPerFrame = 0; testData.ReleaseOnce = true; testData.Texture = Game.Content.Load<Texture2D>("electricity"); particles.RegisterEffect("shock", testData); ChargeCooldown = 1.0f; CurrentChargeCooldown = 1.0f; InputManager inputManager = new InputManager(); InputManager.KeyPressedCallback += pressKey; InputManager.KeyReleasedCallback += releaseKey; sounds = new SoundManager(); wordsDict = new Dictionary<string, string>(); wordsDict.Add("MONSTER SAVE", "monstersave"); wordsDict.Add("DOUBLE SAVE", "doublesave"); wordsDict.Add("TRIPLE SAVE", "triplesave"); drawer2D = new Drawer2D(Game.Content, Game.GraphicsDevice); client = new Client(online); string name = client.Connect(); if (name == "error") { Console.Out.WriteLine("connection refused"); name = "0"; online = false; } Hospital hospital1 = new Hospital(new Vector3(-10, 0, -10), new Vector3(4, 2, 3), ComponentManager, Game.Content, Game.GraphicsDevice, "hospital", Color.Red, new Point(2, 0)); Hospital hospital2 = new Hospital(new Vector3(12, 0, 12), new Vector3(4, 2, 3), ComponentManager, Game.Content, Game.GraphicsDevice, "hospital", Color.Blue, new Point(1, 0)); hospitals.Add(hospital1); hospitals.Add(hospital2); Random r = new Random(1); for (int i = 0; i < 20; i++) // fnord { NPC npc; switch ((int)(detRand(r) * 3)) { case (0): npc = new Smoker(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; case (1): npc = new Fatter(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; case (2): npc = new Older(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; default: /* graphics don't exist yet, never reached */ npc = new Worker(new Vector3(detRand(r) * 9, 5, detRand(r) * 10 - 0), ComponentManager, Game.Content, Game.GraphicsDevice); break; } npc.velocityController.MaxSpeed = 1; npc.SetTag((i + 1000).ToString()); int al = (int)(detRand(r) * 2); npc.Team = hospitals[al]; npc.Velocity = new Vector3(0f, -0.5f, 0f); npc.HasMoved = true; dorfs.Add(npc); } player = new Player(name, new Vector3(hospital1.Component.LocalTransform.Translation.X + 5, hospital1.Component.LocalTransform.Translation.Y, hospital1.Component.LocalTransform.Translation.Z), ComponentManager, Game.Content, Game.GraphicsDevice, "surgeonwalk"); player.Velocity = new Vector3(0f, -0.5f, 0f); player.HasMoved = true; dorfs.Add(player); players.Add(player); if (!online) { aiPlayers.Add(new Player("1", new Vector3(hospital2.Component.LocalTransform.Translation.X - 5, hospital2.Component.LocalTransform.Translation.Y, hospital2.Component.LocalTransform.Translation.Z), ComponentManager, Game.Content, Game.GraphicsDevice, "surgeonwalk")); players.Add(aiPlayers.ElementAt(0)); dorfs.Add(aiPlayers.ElementAt(0)); aiPlayers.ElementAt(0).team = hospital2; VelocityController velocityController4 = new VelocityController(aiPlayers.ElementAt(0)); velocityController4.IsTracking = true; } VelocityController velocityController3 = new VelocityController(player); velocityController3.IsTracking = true; Vector3 boundingBoxPos = new Vector3(0, -2, 0); Vector3 boundingBoxExtents = new Vector3(MapWidth, 4, MapHeight); Vector3 boundingBoxMin = boundingBoxPos - boundingBoxExtents * 0.5f; Vector3 boundingBoxMax = boundingBoxPos + boundingBoxExtents * 0.5f; ground = (LocatableComponent)EntityFactory.GenerateBlankBox(new BoundingBox(boundingBoxMin, boundingBoxMax), ComponentManager, Game.Content, Game.GraphicsDevice, "newground", Point.Zero, Point.Zero, 128, 128); if (Convert.ToInt32(name) % 2 == 0) player.team = hospital1; else player.team = hospital2; SpriteBatch = new SpriteBatch(Game.GraphicsDevice); Shader = Game.Content.Load<Effect>("Hargraves"); SunMap = Game.Content.Load<Texture2D>("sungradient"); AmbientMap = Game.Content.Load<Texture2D>("ambientgradient"); TorchMap = Game.Content.Load<Texture2D>("torchgradient"); if (online) { AddNotification("Mash Space to Begin"); } base.OnEnter(); }
protected void doActions() { string move = client.Read(); if (move.Length == 0) { return; } string[] toks = move.Split(','); string command = toks[0]; if (command == "general") { bool found = false; int id = 0; try { id = Convert.ToInt32(toks[1], 10); } catch (Exception e) { Console.Error.WriteLine("Failure. id is " + toks[1]); } string action = toks[2]; float x = (float)Convert.ToDouble(toks[3]); float y = (float)Convert.ToDouble(toks[4]); float z = (float)Convert.ToDouble(toks[5]); float vx = (float)Convert.ToDouble(toks[6]); float vy = (float)Convert.ToDouble(toks[7]); float vz = (float)Convert.ToDouble(toks[8]); int team = (int)Convert.ToInt32(toks[9]); foreach (Person p in ComponentManager.FilterComponentsWithTag(toks[1], dorfs)) { Event e = (Event)Enum.Parse(typeof(Event), action, true); if (e == Event.SCORE) { p.team.Score += 70000; p.team.NumPatients++; SoundManager.PlaySound("kaChing", p.GlobalTransform.Translation); p.Die(); string[] choices = wordsDict.Keys.ToArray(); AddNotification(choices[((int)(rand() * choices.Length))], p.team); } p.PerformAction(e); p.LocalTransform = Matrix.CreateTranslation(new Vector3(x, y, z)); p.Velocity = new Vector3(vx, vy, vz); if (p is NPC && vy > 1.0f) { NPC npc = (NPC)p; npc.WalkTimer.Reset(0.75f * npc.MaxWalkTime); } p.team = hospitals[team]; found = true; } if (!found) { Person p; if (id < 1000) { p = new Player(toks[1], new Vector3(x, y, z), ComponentManager, Game.Content, Game.GraphicsDevice, "surgeonwalk"); VelocityController velocityController = new VelocityController(p); velocityController.IsTracking = true; p.team = hospitals[id % 2]; p.Velocity = new Vector3(0, -0.5f, 0); p.HasMoved = true; dorfs.Add(p); players.Add((Player)p); } } } else if (command == "sendpos") { client.Write(encodePerson(player, Event.NOP.ToString())); } else if (command == "exit") { pressKey(Keys.Escape); releaseKey(Keys.Escape); } }
public Person(string _tag, Vector3 position, ComponentManager componentManager, ContentManager content, GraphicsDevice graphics, string spritesheet) : base(componentManager, "person", componentManager.RootComponent, Matrix.CreateTranslation(position), new Vector3(0.5f, 1.0f, 0.5f), new Vector3(0.0f, -0.3f, 0.0f), 1.0f, 1.0f, 0.999f, 0.999f) { OrientWithVelocity = true; Texture2D sprites = content.Load<Texture2D>(spritesheet); tag = _tag; Tags.Add(tag); string name = "person"; OrientWithVelocity = true; this.team = null; Score = 0.0f; AnimationState = new Dictionary<string,string>(); IsSleeping = false; List<Point> offsets = new List<Point>(); offsets.Add(new Point(0, 0)); Point offset = offsets[RandomHelper.random.Next(0, offsets.Count)]; List<Point> rightFrames = new List<Point>(); rightFrames.Add(new Point(1 + offset.X, 0 + offset.Y)); rightFrames.Add(new Point(2 + offset.X, 0 + offset.Y)); rightFrames.Add(new Point(3 + offset.X, 0 + offset.Y)); rightFrames.Add(new Point(4 + offset.X, 0 + offset.Y)); Animation walkRight = new Animation(graphics, sprites, name + "_walk_right", 32, 32, rightFrames, true, Color.White, 10.0f, 0.8f, 1, true); List<Point> leftFrames = new List<Point>(); leftFrames.Add(new Point(1 + offset.X, 0 + offset.Y)); leftFrames.Add(new Point(2 + offset.X, 0 + offset.Y)); leftFrames.Add(new Point(3 + offset.X, 0 + offset.Y)); leftFrames.Add(new Point(4 + offset.X, 0 + offset.Y)); Animation walkLeft = new Animation(graphics, sprites, name + "_walk_left", 32, 32, leftFrames, true, Color.White, 10.0f, 0.8f, 1, false); List<Point> rightFramesIdle = new List<Point>(); rightFramesIdle.Add(new Point(0 + offset.X, 0 + offset.Y)); Animation idleRight = new Animation(graphics, sprites, name + "_idle_right", 32, 32, rightFramesIdle, true, Color.White, 2.0f, 0.8f, 1, true); List<Point> leftFramesIdle = new List<Point>(); leftFramesIdle.Add(new Point(0 + offset.X, 0 + offset.Y)); Animation idleLeft = new Animation(graphics, sprites, name + "_idle_left", 32, 32, leftFramesIdle, true, Color.White, 2.0f, 0.8f, 1, false); walkLeft.Play(); walkRight.Play(); idleLeft.Play(); idleRight.Play(); Matrix spriteMatrix = Matrix.Identity; image = new OrientableBillboardSpriteComponent(componentManager, "idlesprite", this, spriteMatrix, sprites); OrientedAnimation idle = new OrientedAnimation(idleLeft, idleRight); image.AddOrientedAnimation(idle); AnimationState["idle"] = idle.Name; OrientedAnimation walk = new OrientedAnimation(walkLeft, walkRight); image.AddOrientedAnimation(walk); AnimationState["walk"] = walk.Name; Matrix shadowTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); //shadowTransform.Translation = new Vector3(0.0f, -0.31f, 0.0f); shadow = new ShadowComponent(componentManager, "shadow", this, shadowTransform, content.Load<Texture2D>("shadowcircle")); shadow.OrientsToCamera = false; List<Point> shP = new List<Point>(); shP.Add(new Point(0, 0)); Animation shadowAnimation = new Animation(graphics, content.Load<Texture2D>("shadowcircle"), "sh", 32, 32, shP, false, Color.White, 1, 0.7f, 0.7f, false); shadow.AddAnimation(shadowAnimation); shadowAnimation.Play(); shadow.SetCurrentAnimation("sh"); Matrix teamTransform = Matrix.CreateRotationX((float)Math.PI * 0.5f); //shadowTransform.Translation = new Vector3(0.0f, -0.31f, 0.0f); ShadowComponent team = new ShadowComponent(componentManager, "team", this, shadowTransform, content.Load<Texture2D>("circle")); team.OrientsToCamera = false; List<Point> circleP = new List<Point>(); circleP.Add(new Point(0, 0)); Animation circleAnimation = new Animation(graphics, content.Load<Texture2D>("circle"), "teamcircle", 32, 32, shP, false, Color.Red, 1, 0.9f, 0.9f, false); team.AddAnimation(circleAnimation); circleAnimation.Play(); team.SetCurrentAnimation("teamcircle"); teamCircle = team; Tags.Add("Walker"); velocityController = new VelocityController(this); velocityController.IsTracking = true; }