private void CreateScene0() { var holder = new BoxObject(this, boxModel, new Vector3(5, 1, 1), Matrix.Identity, new Vector3(-10, -5, 5)); holder.PhysicsBody.Immovable = true; Components.Add(holder); for (var i = 0; i < 5; i++) { var obj = new SphereObject(this, sphereModel, 0.5f, Matrix.Identity, new Vector3(-12 + i, -8, 5)); obj.PhysicsBody.CollisionSkin.SetMaterialProperties(0, new MaterialProperties(1.0f, 0.2f, 0.2f)); obj.PhysicsBody.AllowFreezing = false; var maxDist1 = new ConstraintMaxDistance(holder.PhysicsBody, new Vector3(-2 + i, -0.5f, 0.5f), obj.PhysicsBody, Vector3.Up * 0.5f, 3f); var maxDist2 = new ConstraintMaxDistance(holder.PhysicsBody, new Vector3(-2 + i, -0.5f, -0.5f), obj.PhysicsBody, Vector3.Up * 0.5f, 3f); maxDist1.EnableConstraint(); maxDist2.EnableConstraint(); Components.Add(obj); if (i == 4) { obj.PhysicsBody.MoveTo(new Vector3(-6, -6, 5), Matrix.Identity); } if (i == 3) { obj.PhysicsBody.MoveTo(new Vector3(-7, -6, 5), Matrix.Identity); } } }
private PhysicObject SpawnPrimitive(Vector3 pos, Matrix ori) { int prim = random.Next(3); PhysicObject physicObj; float a = 1.0f + (float)random.NextDouble() * 1.0f; float b = a + (float)random.NextDouble() * 0.5f; float c = 2.0f / a / b; switch (prim) { case 0: physicObj = new BoxObject(this, boxModel, new Vector3(a, b, c), ori, pos); break; case 1: physicObj = new SphereObject(this, sphereModel, 0.5f, ori, pos); break; case 2: physicObj = new CapsuleObject(this, capsuleModel, 0.5f, 1f, ori, pos); break; default: physicObj = new SphereObject(this, sphereModel, (float)random.Next(5, 15), ori, pos); break; } return(physicObj); }
public IList <SequenceData> OutputSequence(IList <MotionObjectInfo> selected, IList <ProcParam <MotionProcEnv> > args, IEnumerable <ReadOnlyMotionFrame> frames, ProgressInformation progressInfo) { List <SequenceData> ret = new List <SequenceData>(); foreach (MotionObjectInfo info in selected) { TimeSeriesValues values = new TimeSeriesValues("radius"); foreach (var frame in frames) { SphereObject sphere = frame[info] as SphereObject; if (sphere != null) { try { values[frame.Time] = new decimal?[] { (decimal)sphere.Radius }; } catch (ArithmeticException) { values[frame.Time] = null; } } else { values[frame.Time] = null; } } SequenceData data = new SequenceData(values, null, PathEx.GiveName("Radius", info.Name)); ret.Add(data); } return(ret); }
protected override void LoadContent(GraphicInfo GraphicInfo, GraphicFactory factory, IContentManager contentManager) { base.LoadContent(GraphicInfo, factory, contentManager); { { ///Create the xml file model extractor ///Loads a XML file that was export by our 3DS MAX plugin ExtractXmlModelLoader ext = new ExtractXmlModelLoader("Content//ModelInfos//", "Model//", "Textures//"); this.AttachCleanUpAble(ext); ///Extract all the XML info (Model,Cameras, ...) ModelLoaderData data = ext.Load(factory, GraphicInfo, "ilha"); ///Create the WOrld Loader ///Convert the ModelLoaderData in World Entities WorldLoader wl = new WorldLoader(); ///all default wl.LoadWorld(factory, GraphicInfo, World, data); } } { SimpleModel sm2 = new SimpleModel(factory, "Model\\ball"); sm2.SetTexture(factory.CreateTexture2DColor(1, 1, Color.Red, false), TextureType.DIFFUSE); DeferredNormalShader nd = new DeferredNormalShader(); IMaterial m = new DeferredMaterial(nd); SphereObject pi2 = new SphereObject(new Vector3(100, 50, 0), 1, 10, 10, MaterialDescription.DefaultBepuMaterial()); IObject o = new IObject(m, sm2, pi2); this.World.AddObject(o); sound2 = new ObjectFollower3DSound(factory, "Songs/pianosong", o); this.World.AddSoundEmitter(sound2, true); } lt = new LightThrowBepu(this.World, factory); #region NormalLight DirectionalLightPE ld1 = new DirectionalLightPE(Vector3.Left, Color.White); DirectionalLightPE ld2 = new DirectionalLightPE(Vector3.Right, Color.White); DirectionalLightPE ld3 = new DirectionalLightPE(Vector3.Backward, Color.White); DirectionalLightPE ld4 = new DirectionalLightPE(Vector3.Forward, Color.White); DirectionalLightPE ld5 = new DirectionalLightPE(Vector3.Down, Color.White); float li = 0.5f; ld1.LightIntensity = li; ld2.LightIntensity = li; ld3.LightIntensity = li; ld4.LightIntensity = li; ld5.LightIntensity = li; this.World.AddLight(ld1); this.World.AddLight(ld2); this.World.AddLight(ld3); this.World.AddLight(ld4); this.World.AddLight(ld5); #endregion CameraFirstPerson cam = new CameraFirstPerson(MathHelper.ToRadians(30), MathHelper.ToRadians(-10), new Vector3(200, 150, 250), GraphicInfo); this.World.CameraManager.AddCamera(cam); SkyBoxSetTextureCube stc = new SkyBoxSetTextureCube("Textures//grassCube"); CommandProcessor.getCommandProcessor().SendCommandAssyncronous(stc); }
protected IObject DefaultSphereObj(String modelName, Vector3 position, float radius, float scale = 1, float mass = 10) { SimpleModel simpleModel = new SimpleModel(GraphicFactory, modelName); SphereObject tmesh = new SphereObject(position, radius, mass, scale); ForwardMaterial fmaterial = ForwardMaterial.DefaultForwardMaterial(); return(new IObject(fmaterial, simpleModel, tmesh)); }
protected override void Initialize() { base.Initialize(); this.IsFixedTimeStep = false; Content.RootDirectory = "Content"; base.LoadContent(); Console.WriteLine("Starting server"); world = new NetworkServerWorld(new BepuPhysicWorld(-9f, true, 1, true), false); server = new NetworkServer(world); NetWorkServerObject NetWorkServerObject1 = new NetWorkServerObject("tmesh", (mes) => { TriangleMeshObject tmesh = mes.ReadTrianglemesh(Content); return(new ServerIObject(tmesh)); } , (obj, min, mout) => { return(mout.CopyIncommingMessage(min, NetWorkingConstants.HeaderSizeinBytes)); } ); server.CreateServerObject(NetWorkServerObject1); NetWorkServerObject NetWorkServerObject2 = new NetWorkServerObject("simpleball", (mes) => { SphereObject tmesh = mes.ReadSphere(); return(new ServerIObject(tmesh)); } , (obj, min, mout) => { return(mout.CopyIncommingMessage(min, NetWorkingConstants.HeaderSizeinBytes)); } ); server.CreateServerObject(NetWorkServerObject2); NetWorkEchoMessageServer s = new NetWorkEchoMessageServer("teste", (min, mout) => { String message = min.ReadString(); message += "123"; mout.Write(message); return(mout); } ); server.AddNetWorkEchoMessage(s); }
/// <summary> /// Create a simple Sphere object /// </summary> /// <param name="pos"></param> /// <param name="ori"></param> /// <returns></returns> private ThrowParticlesObject SpawnPrimitive(DefaultSprite3DBillboardParticleSystem particleSystem, Vector3 pos, Matrix ori) { ///Load a Model with a custom texture SimpleModel sm2 = new SimpleModel(scene.GraphicFactory, "Model\\ball"); sm2.SetTexture(scene.GraphicFactory.CreateTexture2DColor(1, 1, Color.White, false), TextureType.DIFFUSE); DeferredNormalShader nd = new DeferredNormalShader(); IMaterial m = new DeferredMaterial(nd); SphereObject pi2 = new SphereObject(pos, 1, 10, 1, MaterialDescription.DefaultBepuMaterial()); ThrowParticlesObject o = new ThrowParticlesObject(particleSystem, m, sm2, pi2); return(o); }
private IObject CreateSphere(Vector3 pos, Matrix ori, Color Color) { ///Load a Model with a custom texture SimpleModel sm2 = new SimpleModel(GraphicFactory, "Model\\ball"); sm2.SetTexture(GraphicFactory.CreateTexture2DColor(1, 1, Color, false), TextureType.DIFFUSE); DeferredNormalShader nd = new DeferredNormalShader(); IMaterial m = new DeferredMaterial(nd); SphereObject pi2 = new SphereObject(pos, 1, 0.05f, 10, MaterialDescription.DefaultBepuMaterial()); IObject o = new IObject(m, sm2, pi2); return(o); }
protected IObject CreateSphereMeshModel(String fileName, Vector3 position, Matrix orientation, float raio, float scale = 1, float mass = 10) { SimpleModel simpleModel = new SimpleModel(graphicFactory, fileName); ///Physic info (position, rotation and scale are set here) SphereObject tmesh = new SphereObject(position, raio, mass, scale, MaterialDescription.DefaultBepuMaterial()); ///Shader info (must be a deferred type) DeferredNormalShader shader = new DeferredNormalShader(); ///Material info (must be a deferred type also) DeferredMaterial fmaterial = new DeferredMaterial(shader); ///The object itself return(new IObject(fmaterial, simpleModel, tmesh)); }
/// <summary> /// Create a simple Sphere object /// </summary> /// <param name="pos"></param> /// <param name="ori"></param> /// <returns></returns> private IObject SpawnPrimitive(Vector3 pos, Matrix ori) { ///Load a Model with a custom texture SimpleModel sm2 = new SimpleModel(factory, "Model\\ball"); sm2.SetTexture(factory.CreateTexture2DColor(1, 1, Color.White, false), TextureType.DIFFUSE); ForwardXNABasicShader nd = new ForwardXNABasicShader(); IMaterial m = new ForwardMaterial(nd); SphereObject pi2 = new SphereObject(pos, 1, 0.5f, 1, MaterialDescription.DefaultBepuMaterial()); IObject o = new IObject(m, sm2, pi2); return(o); }
GameObject createObject(ObjectState ob) { GameObject gameOb; bool isBox = ob.GetType().Equals(typeof(BoxObject)); PrimitiveType primitiveType = isBox ? PrimitiveType.Cube : PrimitiveType.Sphere; if (ob.mesh != null) { UnityEngine.Object prefab = Resources.Load(ob.mesh); // Assets/Resources/Prefabs/prefab1.FBX if (prefab == null) { gameOb = GameObject.CreatePrimitive(primitiveType); Debug.Log("Couldnt find " + ob.mesh); } else { gameOb = (GameObject)Instantiate(prefab); } } else { gameOb = GameObject.CreatePrimitive(primitiveType); } gameOb.name = "Object (" + ob.uID + ")" + ob.GetType().ToString(); Vector3 size; if (isBox) { BoxObject boxState = (BoxObject)ob; size = new Vector3(boxState.halfSize.x, boxState.halfSize.y, boxState.halfSize.z); } else { SphereObject boxState = (SphereObject)ob; size = new Vector3(boxState.radius * 2, boxState.radius * 2, boxState.radius * 2); } //size.Scale(new Vector3(2, 2, 2)); if (ob.type == "QuixBox") { Debug.Log("Este 2" + size); } gameOb.transform.localScale = size; gameOb.transform.parent = ServerObjects.transform; return(gameOb); }
public override void OnInitialize(DeviceContextHolder holder) { _effect = holder.GetEffect <EffectDeferredLight>(); _sphere = SphereObject.Create(Radius); _rasterizer = RasterizerState.FromDescription(holder.Device, new RasterizerStateDescription { CullMode = CullMode.Front, FillMode = FillMode.Solid, IsDepthClipEnabled = true, IsAntialiasedLineEnabled = false }); _depth = DepthStencilState.FromDescription(holder.Device, new DepthStencilStateDescription { DepthComparison = Comparison.Greater, IsDepthEnabled = true, IsStencilEnabled = false, DepthWriteMask = DepthWriteMask.Zero }); }
public static Bitmap RenderIconBitmap(int size) { var sphere = new SphereObject(new Vector3(0, 0, 0), 1, new DiffuseSolidMaterial(Color.Yellow)); var light = new SphericalLightSource(new Vector3(3, -3, -3), 1f); var camera = new RectCamera(new Vector3(-1, -1, -4), new Vector3(2, 0, 0), new Vector3(0, 2, 0), -4f); var scene = new RayTracerScene(Color.Green); scene.LightSources.Add(light); scene.Objects.Add(sphere); var colors = new int[size * size]; scene.Render(camera, colors, size, size, true); var bitmap = new DirectBitmap(size, size); bitmap.SetPixels(colors); return(bitmap.Bitmap); }
private void CreateBall(Vector3 pos) { ///Create a Simple Model SimpleModel model = new SimpleModel(GraphicFactory, "..\\Content\\Model\\ball"); model.SetTexture(GraphicFactory.CreateTexture2DColor(1, 1, StaticRandom.RandomColor()), TextureType.DIFFUSE); ///Create a Physic Object IPhysicObject pobj = new SphereObject(pos, 1, 10, 1, MaterialDescription.DefaultBepuMaterial()); pobj.isMotionLess = true; ///Create a shader IShader nd = new DeferredNormalShader(); ///Create a Material IMaterial material = new DeferredMaterial(nd); ///Create a an Object that englobs everything and add it to the world IObject obj = new IObject(material, model, pobj); this.World.AddObject(obj); objects.Add(obj); }
void key_KeyStateChange(InputPlayableKeyBoard ipk) { NetWorkClientObject no = new NetWorkClientObject("simpleball", (mes) => { mes.WriteSphere(new Vector3(50, 50, 10), 1, 1, 10, MaterialDescription.DefaultBepuMaterial()); return(mes); }, (mes, id) => { SimpleModel simpleModel = new SimpleModel(this.GraphicFactory, "Model//ball"); SphereObject sphere = mes.ReadSphere(); DeferredNormalShader shader = new DeferredNormalShader(); DeferredMaterial fmaterial = new DeferredMaterial(shader); IObject obj = new IObject(fmaterial, simpleModel, sphere); obj.SetId(id); return(obj); } ); client.CreateNetWorkObject(no); }
public IList <MotionObject> EditObject(IList <MotionObjectInfo> targetInfoList, IList <ProcParam <MotionProcEnv> > args, ReadOnlyMotionFrame frame, bool previewMode) { SingleSelectParameter mode = args[0] as SingleSelectParameter; NumberParameter value = args[1] as NumberParameter; List <MotionObject> ret = new List <MotionObject>(); foreach (MotionObjectInfo info in targetInfoList) { SphereObject sphere = frame[info] as SphereObject; if (sphere != null) { float radius = sphere.Radius; try { switch (mode.Value) { case 0: radius *= (float)value.Value; break; case 1: radius = (float)value.Value; break; case 2: radius += (float)value.Value; break; } } catch (ArithmeticException) { } ret.Add(new SphereObject(sphere.Position, radius)); } else { ret.Add(null); } } return(ret); }
protected override void LoadContent(PloobsEngine.Engine.GraphicInfo GraphicInfo, PloobsEngine.Engine.GraphicFactory factory, IContentManager contentManager) { base.LoadContent(GraphicInfo, factory, contentManager); { SimpleModel sm = new SimpleModel(factory, "..\\Content\\Model\\ball"); sm.SetTexture(factory.CreateTexture2DColor(1, 1, Color.Blue), TextureType.DIFFUSE); IPhysicObject pi = new SphereObject(new Vector3(0, 0, 0), 1, 10, 30, MaterialDescription.DefaultBepuMaterial()); pi.isMotionLess = true; DeferredNormalShader shader = new DeferredNormalShader(); IMaterial mat = new DeferredMaterial(shader); IObject obj3 = new IObject(mat, sm, pi); this.World.AddObject(obj3); BepuPhysicWorld physicWorld; physicWorld = this.World.PhysicWorld as BepuPhysicWorld; System.Diagnostics.Debug.Assert(physicWorld != null); var field = new GravitationalFieldObject(new InfiniteForceFieldShape(), obj3.PhysicObject.Position, 66730 / 2f, 10000, physicWorld); ///This Method is from BepuPhysicWorld not from th IPhysicObject ///You can use everithing from Bepu using this object instead of the interface ///but take care, the engine dont know about THIS !!! it does not manage these things physicWorld.Space.Add(field); } int numColumns = 7; int numRows = 7; int numHigh = 7; float separation = 3; for (int i = 0; i < numRows; i++) { for (int j = 0; j < numColumns; j++) { for (int k = 0; k < numHigh; k++) { SimpleModel sm = new SimpleModel(factory, "..\\Content\\Model\\cubo"); sm.SetTexture(factory.CreateTexture2DColor(1, 1, Color.White), TextureType.DIFFUSE); BoxObject pi = new BoxObject(new Vector3(separation * i - numRows * separation / 2, 40 + k * separation, separation * j - numColumns * separation / 2), 1, 1, 1, 5, new Vector3(1), Matrix.Identity, MaterialDescription.DefaultBepuMaterial()); pi.Entity.LinearDamping = 0; pi.Entity.AngularDamping = 0; DeferredNormalShader shader = new DeferredNormalShader(); IMaterial mat = new DeferredMaterial(shader); IObject obj3 = new IObject(mat, sm, pi); this.World.AddObject(obj3); pi.Entity.LinearVelocity = new Vector3(30, 0, 0); } } } cam = new CameraFirstPerson(GraphicInfo); cam.FarPlane = 3000; lt = new LightThrowBepu(this.World, factory); #region NormalLight DirectionalLightPE ld1 = new DirectionalLightPE(Vector3.Left, Color.White); DirectionalLightPE ld2 = new DirectionalLightPE(Vector3.Right, Color.White); DirectionalLightPE ld3 = new DirectionalLightPE(Vector3.Backward, Color.White); DirectionalLightPE ld4 = new DirectionalLightPE(Vector3.Forward, Color.White); DirectionalLightPE ld5 = new DirectionalLightPE(Vector3.Down, Color.White); float li = 0.4f; ld1.LightIntensity = li; ld2.LightIntensity = li; ld3.LightIntensity = li; ld4.LightIntensity = li; ld5.LightIntensity = li; this.World.AddLight(ld1); this.World.AddLight(ld2); this.World.AddLight(ld3); this.World.AddLight(ld4); this.World.AddLight(ld5); #endregion this.World.CameraManager.AddCamera(cam); }
public override void Update(GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen) { switch (currentState) { #region Menu case States.Menu: //Platz für ein Menu //Menu(); prewState = States.Menu; currentState = States.Start; break; #endregion #region Start //Start: Objekte werden geladen, Kamera wird erstellt, danach Camto1 case States.Start: startObjects.LoadStartObjects(level.getLevel()); //Zeigt das Baumenü mit den Objekten und Texturen die der Spieler wählen kann, benötigt Name des Bildes auswahlanzeige = startObjects.showObjects("Bau"); objWafC = startObjects.LoadObjWafC(); //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); //danach Kamera an Spielerposition 1 bewegen prewState = States.Start; currentState = States.Camto1; break; #endregion #region Camto1 //Camto1: Kamera wird an die Linke Position bewegt case States.Camto1: aktuallisiereZeit(gameTime); weiterSym.Visible = false; detecting = false; //Kinect deaktiviert //Variable wird für nächste Schussphasen zurückgesetzt firedWaffen = 0; //Kamera wird bewegt cameraMovement.move(zeit,3000,PosX1, level.getSpieler1Pos()); #region Übergangsbedingungen //Wenn die Spielerposition 1 erreicht wurde startet die Bauphase/Schussphase if (Scene.Camera.Position.X == level.getSpieler1Pos()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); //Wenn wir aus der Startphase kommen, -> Bauphase 1 if (prewState == States.Start) { prewState = States.Camto1; currentState = States.Bauphase1O; } //Wenn wir aus der Bauphase von Spieler2 kommen, -> Schussphase 1 else if (prewState == States.Bauphase2O) { prewState = States.Camto1; currentState = States.Schussphase1; } //Wenn wir aus der Schussphase von Spieler2 kommen else if (prewState == States.Schussphase2) { //Ist die Schussphase durch -> Bauphase 1 if (schussphasenDurch) { prewState = States.Camto1; currentState = States.Schussphase1; /* schussphasenDurch wird auf true gesetzt, damit nach der nächsten Schussphase wieder in die Bauphase gewechselt wird. * Schussphase2 sagt also schussphaseDurch= true, will aber erst noch Schussphase 1 */ } //sonst Schussphase 1 else { prewState = States.Camto1; currentState = States.Bauphase1O; } } } #endregion break; #endregion #region Objektemenüs case States.Bauphase2O: case States.Bauphase1O: aktuallisiereZeit(gameTime); detecting = true; //Kinect aktiv if (!weiterSym.Visible) { weiterSym.Visible = true; } float pos; #region Spieler & Spielerposition if (currentState == States.Bauphase1O) { gamer = spieler1; pos = level.getSpieler1Pos(); weiterSym.Position = new Vector3(pos+1.13f, -0.7f, -2f); } else { gamer = spieler2; pos = level.getSpieler2Pos(); weiterSym.Position = new Vector3(pos + 1.13f, -0.7f, -2f); } #endregion #region Objekt erzeugen und mit Hand positionieren if (!showWaffe) { if (getObj && objInHand == false && auswahl != 0 && auswahl < 5) //"klick" und das Objekt wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { objInHand = true; //soll jetzt der Hand folgen aktuellesObj = Objektverwaltung.createObj(auswahl, gamer, pos); //aktuelles Objekt wird erzeugt } if (objInHand)//Ausrichten des Obj { Vector3 rH = new Vector3(rightHand.Position.X, rightHand.Position.Y, -5f); //Handvektor ohne Tiefenveränderung aktuellesObj.setPosition(rH); //Objektposition wird auf Handgelegt Objektverwaltung.orientObj(aktuellesObj, leftHand.Position.X, leftHand.Position.Y); rightHand.Visible = false; //Anzeige der rechten Hand deaktiviert } if (klick && objInHand == true) //wenn sich ein Objekt in der Hand befindet und erneut geklickt wird { rightHand.Visible = true; //Rechte Hand wird wieder angezeigt klick = false; objInHand = false; //Bekommt nicht mehr die Posiotion der hand -> fällt if (currentState == States.Bauphase1O) { prewState = States.Bauphase1O; //Statewechsel currentState = States.Bauphase1T; } else { prewState = States.Bauphase2O; currentState = States.Bauphase2T; } } } #endregion #region Waffe erzeugen und mit Hand positionieren if (showWaffe) { if (getObj && objInHand == false && auswahl != 0 && auswahl < 5) //"klick" und die Waffe wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { objInHand = true; //soll jetzt der Hand folgen aktuelleWaffe = Objektverwaltung.createWaffe(auswahl, gamer, rightHand.Position); //aktuelles Objekt wird erzeugt if (spieler1 == gamer) { spieler1.setWaffen(aktuelleWaffe); //Waffe der Waffenliste des Spieler hinzufügen } else { spieler2.setWaffen(aktuelleWaffe); } } if (objInHand && showWaffe == true) //Ausrichten der Waffe { Vector3 rH = new Vector3(rightHand.Position.X, rightHand.Position.Y, -5f); //Handvektor ohne Tiefenveränderung aktuelleWaffe.setPosition(rH); //Waffenposition wird auf Handgelegt rightHand.Visible = false; //Anzeige der rechten Hand deaktiviert } if (klick && objInHand) //wenn sich ein Objekt in der Hand befindet und erneut geklickt wird { rightHand.Visible = true; //Rechte Hand wird wieder angezeigt klick = false; objInHand = false; } } #endregion #region Wechsel von der Objekt zur Waffenauswahl if (klick&&objInHand == false && auswahl == 5 && showWaffe == false) //"klick" und das Objekt wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { showWaffe = true; } else if (klick && objInHand == false && auswahl == 5 && showWaffe) { showWaffe = false; } #endregion #region Übergangsbedingungen //Wenn Spieler nicht ausreichend Geld hat (oder auf weiter Klickt => in Kinect realisiert) if (gamer.getMoney() < level.getMinMoney() && objInHand == false) { PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); if (currentState == States.Bauphase1O) { prewState = States.Bauphase1O; if (spieler2.getMoney() < level.getMinMoney() && spieler2.getMoney() < spieler1.getMoney()) { currentState = States.Schussphase1; } else { currentState = States.Camto2; } } else //Bauphase2O { prewState = States.Bauphase2O; if (spieler1.getMoney() < spieler2.getMoney()) { currentState = States.Schussphase2; } else { currentState = States.Camto1; } } } #endregion break; #endregion #region Texturenmenüs //Bauphase, Spiele 1, Objekte erstellen case States.Bauphase1T: case States.Bauphase2T: aktuallisiereZeit(gameTime); Objektverwaltung.firstMaterial(aktuellesObj, auswahl); weiterSym.Visible = false; if (currentState == States.Bauphase1T) { gamer = spieler1; } else { gamer = spieler2; } if (klick) //Übergang wird mit klick erzeugt { #region Kosten dem Spieler abziehen if (aktuellesObj.getMaterial() == "MHolz") { } //kostenlos else if (aktuellesObj.getMaterial() == "MStein") { gamer.setMoney(spieler1.getMoney() - 50); } else if (auswahl == 3) { gamer.setMoney(spieler1.getMoney() - 100); } else if (auswahl == 4) { gamer.setMoney(spieler1.getMoney() - 200); } #endregion if (currentState == States.Bauphase1T) { prewState = States.Bauphase1T; currentState = States.Bauphase1O; } else { prewState = States.Bauphase2T; currentState = States.Bauphase2O; } } break; #endregion #region Camto2 //Kamera wird an die Rechte Positon bewegt case States.Camto2: aktuallisiereZeit(gameTime); detecting = false; //Kinect deaktiviert weiterSym.Visible = false; //Variable wird für nächste Schussphasen zurückgesetzt firedWaffen = 0; //Kamera wird bewegt cameraMovement.move(zeit, 3000, PosX1, level.getSpieler2Pos()); #region Übergangsbedingungen //Wenn die Spielerposition 2 erreicht wurde startet die Bauphase/Schussphase if (Scene.Camera.Position.X == level.getSpieler2Pos()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); //Wenn wir aus der Bauphase1 kommen -> Bauphase 2 (ohne Geld, aber mehr Geld als Sp1 Schussphase2) if (prewState == States.Bauphase1O) { //Spieler2 hat genug Geld zum Bauen if (spieler2.getMoney() >= level.getMinMoney()) { prewState = States.Camto2; currentState = States.Bauphase2O; } //Spieler zwei hat nicht genug Geld aber mehr als Spieler1 -> Schussphase 2 else if (spieler2.getMoney() > spieler1.getMoney()) { prewState = States.Camto2; currentState = States.Schussphase2; } } //Wenn wir aus der Schussphase1 kommen, muss Schussphase 2 starten else if (prewState == States.Schussphase1) { prewState = States.Camto2; currentState = States.Schussphase2; } } #endregion break; #endregion #region Schussphasen //Schussphasen case States.Schussphase2: case States.Schussphase1: aktuallisiereZeit(gameTime); detecting = true; //Kinect aktiv weiterSym.Visible = false; int xR; if (currentState == States.Schussphase1) { gamer = spieler1; xR = 1; } else { gamer = spieler2; xR = -1; } #region Schussfunktion //shoot Funktion TODO: "auslagern" if (gamer.getWaffen() != 0) { aktuelleWaffe = Objektverwaltung.getWaffe(gamer, firedWaffen); aktuelleWaffe.setWinkel(rightHand.Position.Y);//Setzt Winkel der Kanone in Waffen if (klick==true) { float schusswinkel,x,y,velocity; Vector3 spawnpoint = new Vector3 ( rightHand.Position.X+1,rightHand.Position.Y-1, rightHand.Position.Z); //Spawnposition nur Vorübergehend sollte am Objekt sein! bullet = new SphereObject(new Vector3(aktuelleWaffe.getPosition().X, aktuelleWaffe.getPosition().Y,rightHand.Position.Z), 0.1f, 10, 10, 0.05f); Vector3 shootdirection = new Vector3(); Scene.Add(bullet); schusswinkel = aktuelleWaffe.getWinkel(); x=(float)Math.Cos(schusswinkel); y=(float)Math.Sin(schusswinkel); shootdirection = new Vector3(x,y,0); if (gamer == spieler1) { velocity = leftHand.Position.Y * 10f; bullet.Physics.LinearVelocity = shootdirection * velocity; } else { velocity = leftHand.Position.Y * 10f; shootdirection.X = shootdirection.X * (-1f); bullet.Physics.LinearVelocity = shootdirection * velocity; } firedWaffen++; bulletInAir = true; } } if (bulletInAir) { cameraMovement.chaseBullet(bullet.Position, cam.Position); bullet.Collided +=new EventHandler<CollisionArgs>(bulletCollidedHandler); //Partikel Effekte FUNKTIONIERT NOCH NICHT ParticleEffect effect = new ParticleEffect() { Emitters = new EmitterCollection() { new SphereEmitter { Name="Flame", Budget = 100, Term = 0.5f, ReleaseQuantity = 8, Enabled = true, ReleaseSpeed = new Range(5f,5f), ReleaseColour = new ColourRange { Red = new Range(0.9f,1f), Green = new Range(0.5f,0.5f), Blue = new Range(0f,0f), }, ReleaseOpacity = new Range(1f,1f), ReleaseScale = new Range(2f,2f), ReleaseRotation = new RotationRange { Pitch = new Range(0f,0f), Yaw = new Range(0f,0f), Roll = new Range(-3.14f,3.14f), }, ParticleTexture = Core.Content.Load<Texture2D>("Flames"), BlendMode = EmitterBlendMode.Add, Radius = 3f, Shell = true, Radiate = true, BillboardStyle = ProjectMercury.BillboardStyle.Spherical, Modifiers = new ModifierCollection { new OpacityInterpolator2 { InitialOpacity = 0.5f, FinalOpacity = 0f, }, new RotationModifier { RotationRate = new Vector3(0,0,1) } }, Controllers = new ControllerPipeline { new CooldownController { CooldownPeriod = 0.02f, }, } } } }; ParticleObject particle = new ParticleObject(bullet.Position, effect); } #endregion #region Übergangsbedingungen //Wenn alle Waffen abgefeuert wurden... if (firedWaffen == gamer.getWaffen()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); //Wenn die Schussphase durch ist, beginnt die Bauphase if (schussphasenDurch) { if (currentState == States.Schussphase1) { prewState = States.Schussphase1; schussphasenDurch = false; currentState = States.Bauphase1O; } else { prewState = States.Schussphase2; schussphasenDurch = false; currentState = States.Camto1; } } //Sonst in die andere Schussphase wechseln else { if (currentState == States.Schussphase1) { prewState = States.Schussphase1; schussphasenDurch = true; //nach der Schussphase2 ist die Schussphase beendet currentState = States.Camto2; } else { prewState = States.Schussphase2; schussphasenDurch = true; //nach der Schussphase1 ist die Schussphase beendet currentState = States.Camto1; } } } #endregion break; #endregion #region End //Ende des Spiels case States.End: //noch leer //neues Spiel, alle vorherigen Objekte werden gelöscht Scene.RemoveAllSceneObjects(); break; #endregion } #region Objekt-/ Texturauswahl ein-/ausblenden if (currentState != States.Menu && currentState != States.Start && currentState != States.End) { if (currentState == States.Bauphase1O) { if (showWaffe) { startObjects.einausblender(auswahlanzeige, objWafC, 11, zeit); } else { startObjects.einausblender(auswahlanzeige, objWafC, 1, zeit); } } else if (currentState == States.Bauphase1T) { showWaffe = false; startObjects.einausblender(auswahlanzeige, objWafC, 12, zeit); } else if (currentState == States.Bauphase2O) { if (showWaffe) { startObjects.einausblender(auswahlanzeige, objWafC, 21, zeit); } else { startObjects.einausblender(auswahlanzeige, objWafC, 2, zeit); } } else if (currentState == States.Bauphase2T) { showWaffe = false; startObjects.einausblender(auswahlanzeige, objWafC, 22, zeit); } else { startObjects.einausblender(auswahlanzeige, objWafC, 0, zeit); } } #endregion #region Kinect if (detecting) { if (Scene.Kinect.SkeletonDataReady) { List<NOVA.Components.Kinect.Skeleton> skeletons = new List<NOVA.Components.Kinect.Skeleton>(Scene.Kinect.Skeletons); //Aktives Skelett finden foreach (NOVA.Components.Kinect.Skeleton skeleton in skeletons) { if (skeleton.TrackingState == SkeletonTrackingState.Tracked && skeleton.Joints.Count != 0) { //Box auf Hand, Klick auf Weiter #region Detektion der rechten Hand if (skeleton.Joints[JointType.HandRight].TrackingState == JointTrackingState.Tracked) { //Position der rechten Hand des Spielers in Bildschirmkoodinaten Vector2 screenPos = skeleton.Joints[JointType.HandRight].ScreenPosition; Vector2 normScreenPos = new Vector2(screenPos.X, screenPos.Y); screenPos.X = screenPos.X * Scene.Game.Window.ClientBounds.Width; screenPos.Y *= Scene.Game.Window.ClientBounds.Height; //parallele Ebene zum Bildschirm erzeugen in der die Kugel transformiert wird Plane plane2 = new Plane(Vector3.Forward, -4f); //Weltkoordinatenpunk finden Vector3 worldPos2 = Helpers.Unproject(screenPos, plane2); #region Box auf Hand //Position der Kugel setzen rightHand.Position = worldPos2; #endregion #region getObj if (normScreenPos.X >= 0.2f && normScreenPos.X <= 0.8f && normScreenPos.Y <= 0.1f) { getObj = true; } else {getObj = false; } #endregion #region WEITER klick //Wenn sich die rechte Hand in der oberen, rechten Ecke befindet & KLICK -> Klick auf WEITER if (normScreenPos.X >= 0.9f && normScreenPos.Y >= 0.9f) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); if (currentState == States.Bauphase1O) { prewState = States.Bauphase1O; //wenn Spieler2 über genügend Geld zum bauen verfügt, Bauphase Spieler 2 //Wenn Spieler2 mehr Geld besitzt fängt er die Schussphase2 an if (spieler2.getMoney() >= level.getMinMoney() || spieler2.getMoney() > spieler1.getMoney()) { currentState = States.Camto2; } //wenn Spieler2 nicht über genügend Geld zum bauen verfügt, und Spieler1 mehr Geld hat beginnt Schussphase1 else { currentState = States.Schussphase1; } } else if (currentState == States.Bauphase2O) { prewState = States.Bauphase2O; //Wenn Spieler2 mehr Geld besitzt fängt er die Schussphase2 an if (spieler2.getMoney() > spieler1.getMoney()) { currentState = States.Schussphase2; } //sonst Spieler 1 else { currentState = States.Camto1; } } else { return; } } #endregion } #endregion //Box auf Hand, Auswahl Textur/ Objekt #region Detektion der linken Hand if (skeleton.Joints[JointType.HandLeft].TrackingState == JointTrackingState.Tracked) { //Position der linken Hand des Spielers in Bildschirmkoodinaten screenPos = skeleton.Joints[JointType.HandLeft].ScreenPosition; Vector2 normScreenPos = new Vector2(screenPos.X, screenPos.Y); screenPos.X = screenPos.X * Scene.Game.Window.ClientBounds.Width; screenPos.Y *= Scene.Game.Window.ClientBounds.Height; //parallele Ebene zum Bildschirm erzeugen in der die Kugel transformiert wird Plane plane2 = new Plane(Vector3.Forward, -1f); //Weltkoordinatenpunk finden Vector3 worldPos2 = Helpers.Unproject(screenPos, plane2); #region Box auf Hand //Position der Kugel setzen leftHand.Position = worldPos2; #endregion #region Auswahl Textur/ Objekt auswahl = Auswahl.auswahl(normScreenPos); #endregion } #endregion //Hintergrundsbild verschieben #region Detektion des Kopfes if (skeleton.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked) { //Position des Kopfes des Spielers in Bildschirmkoodinaten Vector2 screenPos = skeleton.Joints[JointType.Head].ScreenPosition; Vector2 normScreenPos = new Vector2(screenPos.X / Scene.Game.Window.ClientBounds.Width, screenPos.Y / Scene.Game.Window.ClientBounds.Height); //Hintergrund bewegen startObjects.MoveBackground(normScreenPos.X - 0.5f, normScreenPos.Y - 0.5f); } #endregion } } } } else { } #endregion objState = currentState; //Am Ende jenden Updates wird der State angeglichen Objektverwaltung.refreshObj(spieler1,spieler2); //Entfernt Objekte ohne LP base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen); }
private void CreateGeometryObj(string id, GEOMETRYTYPE type, Quaternion roration, Vector3 pos, Vector3 size, Material mat, int layer, out GeometryObject obj, List <object> param = null) { obj = null; if (string.IsNullOrEmpty(id)) { return; } if (!IsObjExist(id, out obj)) { switch (type) { case GEOMETRYTYPE.GEOMETRY_TYPE_CUBE: obj = new CubeObject(id, roration, pos, size, mat, layer); break; case GEOMETRYTYPE.GEOMETRY_TYPE_TAPER: obj = new TaperObject(id, roration, pos, size, mat, layer); break; case GEOMETRYTYPE.GEOMETRY_TYPE_AXIS: obj = new AxisObject(id, roration, pos, size, mat, layer); break; case GEOMETRYTYPE.GEOMETRY_TYPE_TEXT: obj = new TextObject(id, roration, pos, size, mat, layer); break; case GEOMETRYTYPE.GEOMETRY_TYPE_RING: obj = new RingObject(id, roration, pos, size, mat, layer); break; case GEOMETRYTYPE.GEOMETRY_TYPE_SECTOR: obj = new SectorObject(id, roration, pos, size, mat, layer, param); break; case GEOMETRYTYPE.GEOMETRY_TYPE_SPHERE: obj = new SphereObject(id, roration, pos, size, mat, layer); break; default: break; } if (obj != null) { obj.DrawCounter++; m_ObjectTbl.Add(obj); } } else { if (obj != null) { obj.Rotation = roration; obj.Position = pos; obj.Scale = size; obj.DefaultMat = mat; obj.Layer = layer; obj.DrawCounter++; } } }
public static IObject[] CreateOBJ(IWorld world, GraphicFactory factory, GraphicInfo ginfo, ObjectInformation[] mi) { IModelo model = new CustomModel(factory, mi); MaterialDescription material; if (mi[0].staticfriction == -1 || mi[0].dinamicfriction == -1 || mi[0].ellasticity == -1) { material = MaterialDescription.DefaultBepuMaterial(); } else { material = new MaterialDescription(mi[0].staticfriction, mi[0].dinamicfriction, mi[0].ellasticity); } IPhysicObject po; bool massflag = false; if (mi[0].mass == 0) { massflag = true; mi[0].mass = 0.5f; } BatchInformation binf = model.GetBatchInformation(0)[0]; BoundingBox bb; switch (mi[0].collisionType) { case "Ghost": po = new GhostObject(mi[0].position, Matrix.CreateFromQuaternion(mi[0].rotation), mi[0].scale); break; case "Cylinder": binf.ModelLocalTransformation = Matrix.Identity; bb = ModelBuilderHelper.CreateBoundingBoxFromModel(binf); Vector3 len = bb.Max - bb.Min; po = new CylinderObject(mi[0].position, len.Y, len.X / 2, Vector3.Up, mi[0].mass, Matrix.CreateFromQuaternion(mi[0].rotation), material); break; case "Sphere": binf.ModelLocalTransformation = Matrix.Identity; po = new SphereObject(mi[0].position, model.GetModelRadius(), mi[0].mass, mi[0].scale.X, material); po.Rotation = Matrix.CreateFromQuaternion(mi[0].rotation); break; case "Box": bb = ModelBuilderHelper.CreateBoundingBoxFromModel(binf); len = bb.Max - bb.Min; po = new BoxObject(mi[0].position, len.X, len.Y, len.Z, mi[0].mass, mi[0].scale, Matrix.CreateFromQuaternion(mi[0].rotation), material); break; case "Water": po = new GhostObject(mi[0].position, Matrix.CreateFromQuaternion(mi[0].rotation), mi[0].scale); break; case "TriangleMesh": default: po = new TriangleMeshObject(model, Vector3.Zero, Matrix.Identity, new Vector3(1), material); break; } po.isMotionLess = massflag; IShader shader = null; #if !REACH && !WINDOWS_PHONE if (mi[0].HasTexture(TextureType.ENVIRONMENT)) { shader = new DeferredEMReflectiveShader(); (shader as DeferredEMReflectiveShader).TextureCube = mi[0].textureInformation.getCubeTexture(TextureType.ENVIRONMENT); } else if (mi[0].collisionType != null && mi[0].collisionType.Contains("Water")) { Vector3 position = (Vector3)(mi[0].extra["position"]); var width = (mi[0].extra["width"]); var height = (mi[0].extra["length"]); shader = new DeferredWaterCompleteShader((int)width, (int)height, new Plane(position.X, position.Y, position.Z, 1), 10.0f); } else { shader = new DeferredCustomShader(mi[0].HasTexture(TextureType.GLOW), mi[0].HasTexture(TextureType.BUMP), mi[0].HasTexture(TextureType.SPECULAR), mi[0].HasTexture(TextureType.PARALAX)); } DeferredMaterial dm = new DeferredMaterial(shader); #else shader = new ForwardXNABasicShader(); ForwardMaterial dm = new ForwardMaterial(shader); #endif IObject ob = new IObject(dm, model, po); ob.Name = mi[0].modelName; return(new IObject[] { ob }); }
public ObjectState toJson() { uID = this.uID != "" ? this.uID : uniqueId(); ObjectState p = null; if (shape == "box") { p = new BoxObject(); BoxObject bo = (BoxObject)p; bo.halfSize = new V3(); /* if (isMesh) * { * bo.halfSize.x = gameObject.transform.localScale.x / 2; * bo.halfSize.y = gameObject.transform.localScale.y / 2; * bo.halfSize.z = gameObject.transform.localScale.z / 2; * } * else * {*/ bo.halfSize.x = gameObject.transform.localScale.x; bo.halfSize.y = gameObject.transform.localScale.y; bo.halfSize.z = gameObject.transform.localScale.z; // } } if (shape == "sphere") { p = new SphereObject(); SphereObject bo = (SphereObject)p; bo.radius = gameObject.transform.localScale.x / 2; } if (boundingBox != null && boundingBox != null) { p.boundBox = new PhyBoundBox(); var collider = boundingBox.bounds; p.boundBox.center.x = collider.center.x - transform.position.x;; p.boundBox.center.y = collider.center.y - transform.position.y; p.boundBox.center.z = collider.center.z - transform.position.z; p.boundBox.extents.x = collider.extents.x; p.boundBox.extents.y = collider.extents.y; p.boundBox.extents.z = collider.extents.z; } p.quaternion.x = gameObject.transform.rotation.x; p.quaternion.y = gameObject.transform.rotation.y; p.quaternion.z = gameObject.transform.rotation.z; p.quaternion.w = gameObject.transform.rotation.w; p.position.x = gameObject.transform.position.x; p.position.y = gameObject.transform.position.y; p.position.z = gameObject.transform.position.z; p.type = type; p.uID = uID; p.material = material; p.instantiate = instantiate; p.mass = mass; p.mesh = mesh; p.isMesh = isMesh; return(p); }
public override void Update(GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen) { #region Kinect if (Scene.Kinect.SkeletonDataReady) { List<NOVA.Components.Kinect.Skeleton> skeletons = new List<NOVA.Components.Kinect.Skeleton>(Scene.Kinect.Skeletons); //Aktives Skelett finden foreach (NOVA.Components.Kinect.Skeleton skeleton in skeletons) { if (skeleton.TrackingState == SkeletonTrackingState.Tracked && skeleton.Joints.Count != 0) { //Box auf Hand, Klick auf Weiter #region Detektion der rechten Hand if (skeleton.Joints[JointType.HandRight].TrackingState == JointTrackingState.Tracked) { //Position der rechten Hand des Spielers in Bildschirmkoodinaten rHv2s = skeleton.Joints[JointType.HandRight].ScreenPosition; rHv2s -= new Vector2(0, 10); rHv2n.X = rHv2s.X / screenDim.X; rHv2n.Y = rHv2s.Y / screenDim.Y; Plane plane2 = new Plane(Vector3.Forward, -4f); //Weltkoordinatenpunk finden Vector3 worldPos2R = Helpers.Unproject(rHv2s, plane2, false); rHv2w = new Vector2(worldPos2R.X, worldPos2R.Y); #region Auswahl Textur/ Objekt auswahl = Auswahl.auswahl(rHv2n); #endregion if (klickCounter<100) { klickCounter++; } try { if (skeleton.HandPointers[1].IsTracked == true) { if (skeleton.HandPointers[1].HandEventType == InteractionHandEventType.GripRelease && klickCounter >= 100) { klickRH = true; klickCounter = 0; } else { klickRH = false; } } } catch { }; } #endregion //Box auf Hand, Auswahl Textur/ Objekt #region Detektion der linken Hand if (skeleton.Joints[JointType.HandLeft].TrackingState == JointTrackingState.Tracked) { //Position der linken Hand des Spielers in Bildschirmkoodinaten lHv2s = skeleton.Joints[JointType.HandLeft].ScreenPosition; lHv2n.X = lHv2s.X / screenDim.X; lHv2n.Y = lHv2s.Y / screenDim.Y; //parallele Ebene zum Bildschirm erzeugen in der die Kugel transformiert wird Plane plane2 = new Plane(Vector3.Forward, -4f); //Weltkoordinatenpunk finden Vector3 worldPos2L = Helpers.Unproject(lHv2s, plane2, false); lHv2w = new Vector2(worldPos2L.X, worldPos2L.Y); /* try { // klickLH = (skeleton.HandPointers[1].HandEventType == InteractionHandEventType.Grip); } catch { };*/ } #endregion //Hintergrundsbild verschieben if (bulletInAir == false) { #region Detektion des Kopfes if (skeleton.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked) { //Position des Kopfes des Spielers in Bildschirmkoodinaten Vector2 screenPos = skeleton.Joints[JointType.Head].ScreenPosition; Vector2 normScreenPos = new Vector2(screenPos.X / screenDim.X, screenPos.Y / screenDim.Y); Vector3 realPos = skeleton.Joints[JointType.Head].WorldPosition; //Hintergrund bewegen startObjects.MoveBackground(normScreenPos.X - 0.5f, normScreenPos.Y - 0.5f); //Kamera auf z-Achse bewegen realPos = skeleton.Joints[JointType.Head].WorldPosition; #region Zoom Funktionen //ZOOM Funktionen if (currentState == States.Schussphase1 || currentState == States.Schussphase2) { if (gamer == spieler1) { cameraMovement.zoom(realPos.Z, 1, new Vector3(10f, 2f, 15f)); } if (gamer == spieler2) { cameraMovement.zoom(realPos.Z, -1, new Vector3(10f, 2f, 15f)); } } if (currentState == States.Bauphase1O || currentState == States.Bauphase1T || currentState == States.Bauphase2O || currentState == States.Bauphase2T) { if (gamer == spieler1) { cameraMovement.zoom(realPos.Z, 1, new Vector3(1.5f, 0f, 4f)); } if (gamer == spieler2) { cameraMovement.zoom(realPos.Z, -1, new Vector3(1.5f, 0f, 4f)); } } #endregion } #endregion } } } } #endregion switch (currentState) { #region Start //Start: Objekte werden geladen, Kamera wird erstellt, danach Camto1 case States.Start: startObjects.LoadStartObjects(level.getLevel()); //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); //danach Kamera an Spielerposition 1 bewegen currentState = States.Camto1; break; #endregion #region Camto1 //Camto1: Kamera wird an die Linke Position bewegt case States.Camto1: aktuallisiereZeit(gameTime); //Variable wird für nächste Schussphasen zurückgesetzt firedWaffen = 0; //Kamera wird bewegt cameraMovement.move(zeit,3000,PosX1, level.getSpieler1Pos()); #region Übergangsbedingungen //Wenn die Spielerposition 1 erreicht wurde startet die Bauphase/Schussphase if (Scene.Camera.Position.X == level.getSpieler1Pos()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); currentState = logik.uebergang(currentState, spieler1, spieler2, level); } #endregion break; #endregion #region Objektemenüs case States.Bauphase2O: case States.Bauphase1O: aktuallisiereZeit(gameTime); float pos; #region Spieler & Spielerposition if (currentState == States.Bauphase1O) { gamer = spieler1; pos = level.getSpieler1Pos(); } else { gamer = spieler2; pos = level.getSpieler2Pos(); } #endregion #region Objekt erzeugen und mit Hand positionieren if (!showWaffe) { if (klickRH && !objInHand && auswahl != 0 &&auswahl < 5) //"klick" und das Objekt wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { klickRH = false; objInHand = true; //soll jetzt der Hand folgen aktuellesObj = Objektverwaltung.createObj(auswahl, gamer, pos, rHv2s); //aktuelles Objekt wird erzeugt } if (objInHand)//Ausrichten des Obj { Vector3 rH = new Vector3(rHv2w.X, rHv2w.Y, -5f); //Handvektor ohne Tiefenveränderung aktuellesObj.setPosition(rH); //Objektposition wird auf Handgelegt Objektverwaltung.orientObj(aktuellesObj, lHv2w.X, lHv2w.Y); } if (klickRH && objInHand) //wenn sich ein Objekt in der Hand befindet und erneut geklickt wird { klickRH = false; objInHand = false; //Bekommt nicht mehr die Posiotion der hand -> fällt if (currentState == States.Bauphase1O) { currentState = States.Bauphase1T; } else { currentState = States.Bauphase2T; } } } #endregion #region Waffe erzeugen und mit Hand positionieren if (showWaffe) { if (klickRH && !objInHand && auswahl != 0 && auswahl < 5) //"klick" und die Waffe wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { klickRH = false; objInHand = true; //soll jetzt der Hand folgen aktuelleWaffe = Objektverwaltung.createWaffe(auswahl, gamer, rHv2w); //aktuelles Objekt wird erzeugt if (spieler1 == gamer) { spieler1.setWaffen(aktuelleWaffe); //Waffe der Waffenliste des Spieler hinzufügen } else { spieler2.setWaffen(aktuelleWaffe); } } if (objInHand && showWaffe == true) //Ausrichten der Waffe { Vector3 rH = new Vector3(rHv2w, -5f); //Handvektor ohne Tiefenveränderung aktuelleWaffe.getModelObject().Position = rH; //Waffenposition wird auf Handgelegt } if (klickRH && objInHand) //wenn sich ein Objekt in der Hand befindet und erneut geklickt wird { klickRH = false; objInHand = false; } } #endregion #region Wechsel von der Objekt zur Waffenauswahl if (klickRH && objInHand == false && auswahl == 5 && showWaffe == false) //"klick" und das Objekt wurde noch nicht erstellt und linke hand befindet sich auf auswahlfeld { klickRH = false; showWaffe = true; } else if (klickRH && objInHand == false && auswahl == 5 && showWaffe) { klickRH = false; showWaffe = false; } #endregion #region Übergangsbedingungen //Wenn Spieler nicht ausreichend Geld hat (oder auf weiter Klickt => in Kinect realisiert) if (gamer.getMoney() < level.getMinMoney() && objInHand == false && (currentState == States.Bauphase1O ||currentState == States.Bauphase2O)) { PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); showWaffe = false; currentState = logik.uebergang(currentState, spieler1, spieler2, level); } #endregion break; #endregion #region Texturenmenüs //Bauphase, Spiele 1, Objekte erstellen case States.Bauphase1T: case States.Bauphase2T: aktuallisiereZeit(gameTime); Objektverwaltung.firstMaterial(aktuellesObj, auswahl); if (currentState == States.Bauphase1T) { gamer = spieler1; } else { gamer = spieler2; } if (klickRH) //Übergang wird mit klick erzeugt { klickRH = false; #region Kosten dem Spieler abziehen if (aktuellesObj.getMaterial() == "MHolz") { } //kostenlos else if (aktuellesObj.getMaterial() == "MStein") { DrawHelper.setmoney(gamer, -50, rHv2s); } else if (auswahl == 3) { DrawHelper.setmoney(gamer, -100, rHv2s); } else if (auswahl == 4) { DrawHelper.setmoney(gamer, -200, rHv2s); } #endregion if (currentState == States.Bauphase1T) { currentState = States.Bauphase1O; } else { currentState = States.Bauphase2O; } } break; #endregion #region Camto2 //Kamera wird an die Rechte Positon bewegt case States.Camto2: aktuallisiereZeit(gameTime); //Variable wird für nächste Schussphasen zurückgesetzt firedWaffen = 0; //Kamera wird bewegt cameraMovement.move(zeit, 3000, PosX1, level.getSpieler2Pos()); #region Übergangsbedingungen //Wenn die Spielerposition 2 erreicht wurde startet die Bauphase/Schussphase if (Scene.Camera.Position.X == level.getSpieler2Pos()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); currentState = logik.uebergang(currentState, spieler1, spieler2, level); } #endregion break; #endregion #region Schussphasen //Schussphasen case States.Schussphase2: case States.Schussphase1: aktuallisiereZeit(gameTime); int xR; if (currentState == States.Schussphase1) { gamer = spieler1; xR = 1; } else { gamer = spieler2; xR = -1; } #region Schussfunktion //shoot Funktion TODO: "auslagern" if (gamer.getWaffen() != 0 && !bulletInAir)//Wenn der Spieler Waffen hat { aktuelleWaffe = Objektverwaltung.getWaffe(gamer, firedWaffen); aktuelleWaffe.setWinkel(rHv2n.Y);//Setzt Winkel der Kanone in Waffen if (klickRH) { klickRH = false; float schusswinkel; float x; float y; float velocity; if (aktuelleWaffe.getType()=="Balliste") { Munition="Bolzen"; } else if (aktuelleWaffe.getType() == "Kanone") { Munition = "Kugel"; } else { Munition = "Crap"; } if (Munition =="Kugel") { bullet = new SphereObject(new Vector3(aktuelleWaffe.getPosition().X, aktuelleWaffe.getPosition().Y+2.5f,aktuelleWaffe.getPosition().Z), 0.1f, 10, 10, 0.05f); Scene.Add(bullet); } else if (Munition == "Bolzen") { bolzen = new ModelObject(new Vector3(aktuelleWaffe.getPosition().X, aktuelleWaffe.getPosition().Y + 0.5f, aktuelleWaffe.getPosition().Z), Quaternion.Identity, new Vector3(1, 1, 1), CollisionType.ExactMesh, "", "Bolzen", 0.05f); Scene.Add(bolzen); } schusswinkel = aktuelleWaffe.getWinkel(); x=(float)Math.Cos(schusswinkel); y=(float)Math.Sin(schusswinkel); Vector3 shootdirection = new Vector3(x,y,0); velocity = (1-lHv2n.Y) * 10f; if (Munition == "Kugel") { bullet.Physics.LinearVelocity = shootdirection * velocity * xR; } else if (Munition == "Bolzen") { bolzen.Physics.LinearVelocity = shootdirection * velocity * xR; } firedWaffen++; bulletInAir = true; } } if (bulletInAir) { if (Munition == "Kugel") { cameraMovement.chaseBullet(bullet.Position, cam.Position); bullet.Collided += new EventHandler<CollisionArgs>(bulletCollidedHandler); } else if (Munition == "Bolzen") { cameraMovement.chaseBullet(bolzen.Position, cam.Position); bolzen.Collided += new EventHandler<CollisionArgs>(bulletCollidedHandler); } //Partikel Effekte FUNKTIONIERT NOCH NICHT ParticleEffect effect = new ParticleEffect() { Emitters = new EmitterCollection() { new SphereEmitter { Name="Flame", Budget = 100, Term = 0.5f, ReleaseQuantity = 8, Enabled = true, ReleaseSpeed = new Range(5f,5f), ReleaseColour = new ColourRange { Red = new Range(0.9f,1f), Green = new Range(0.5f,0.5f), Blue = new Range(0f,0f), }, ReleaseOpacity = new Range(1f,1f), ReleaseScale = new Range(2f,2f), ReleaseRotation = new RotationRange { Pitch = new Range(0f,0f), Yaw = new Range(0f,0f), Roll = new Range(-3.14f,3.14f), }, ParticleTexture = Core.Content.Load<Texture2D>("Flames"), BlendMode = EmitterBlendMode.Add, Radius = 3f, Shell = true, Radiate = true, BillboardStyle = ProjectMercury.BillboardStyle.Spherical, Modifiers = new ModifierCollection { new OpacityInterpolator2 { InitialOpacity = 0.5f, FinalOpacity = 0f, }, new RotationModifier { RotationRate = new Vector3(0,0,1) } }, Controllers = new ControllerPipeline { new CooldownController { CooldownPeriod = 0.02f, }, } } } }; ParticleObject particle = new ParticleObject(bullet.Position, effect); } #endregion #region Übergangsbedingungen //Wenn alle Waffen abgefeuert wurden... if (firedWaffen == gamer.getWaffen()) { //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); currentState = logik.uebergang(currentState, spieler1, spieler2, level); } #endregion break; #endregion #region End //Ende des Spiels case States.End: //noch leer //neues Spiel, alle vorherigen Objekte werden gelöscht Scene.RemoveAllSceneObjects(); break; #endregion } #region WEITER //Wenn sich die rechte Hand in der oberen, rechten Ecke befindet & KLICK -> Klick auf WEITER if (rHv2n.X >= 0.9f && rHv2n.Y >= 0.4f && rHv2n.Y <= 0.6f && klickRH) { klickRH = false; showWaffe = false; //setzt die Variable PosX1 auf die Position bevor er in den nächsten State wechselt PosX1 = Scene.Camera.Position.X; Zeit1 = gameTime.TotalGameTime.Milliseconds + gameTime.TotalGameTime.Seconds * 1000 + gameTime.TotalGameTime.Minutes * 60 * 1000; //Zeit zwischenspeichern aktuallisiereZeit(gameTime); currentState = logik.uebergang(currentState, spieler1, spieler2, level); } #endregion #region Update Ende objState = currentState; //Am Ende jenden Updates wird der State angeglichen screenDim = new Vector2(Scene.Game.Window.ClientBounds.Width, Scene.Game.Window.ClientBounds.Height); Objektverwaltung.refreshObj(spieler1,spieler2); //Entfernt Objekte ohne LP base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen); #endregion }
protected override void LoadContent(GraphicInfo GraphicInfo, GraphicFactory factory, IContentManager contentManager) { base.LoadContent(GraphicInfo, factory, contentManager); SerializatorWrapper SerializatorWrapper = new SerializatorWrapper(); SerializatorWrapper.Serialize(new Vector3(10, 20, 30), "vetor.xml"); Vector3 vec = (Vector3)SerializatorWrapper.Desserialize <Vector3>("vetor.xml", null); Debug.Assert(vec.X == 10); Debug.Assert(vec.Y == 20); Debug.Assert(vec.Z == 30); ObjectMock ObjectMock = new ObjectMock(GraphicFactory, "Model/cenario", Vector3.Zero, Matrix.Identity, Vector3.One); SerializatorWrapper.Serialize(ObjectMock, "cena.xml"); ObjectMock mloaded = (ObjectMock)SerializatorWrapper.Desserialize <ObjectMock>("cena.xml", GraphicFactory); this.World.AddObject(mloaded); IObject obj; { SimpleModel simpleModel = new SimpleModel(factory, "Model//ball"); simpleModel.SetTexture(factory.CreateTexture2DColor(1, 1, Color.Green), TextureType.DIFFUSE); SphereObject tmesh = new SphereObject(new Vector3(100, 200, 10), 1, 10, 5, MaterialDescription.DefaultBepuMaterial()); ForwardXNABasicShader shader = new ForwardXNABasicShader(ForwardXNABasicShaderDescription.Default()); ForwardMaterial fmaterial = new ForwardMaterial(shader); obj = new IObject(fmaterial, simpleModel, tmesh); this.World.AddObject(obj); } this.BindInput(new SimpleConcreteKeyboardInputPlayable(StateKey.PRESS, Keys.Space, (a) => { this.World.RemoveObject(obj); DynamicObjectSaver DynamicObjectSaver = new Serialization.DynamicObjectSaver(obj.Modelo.Name, obj.PhysicObject.Position, obj.PhysicObject.Rotation, obj.PhysicObject.Scale, obj.PhysicObject.Velocity, obj.PhysicObject.AngularVelocity); SerializatorWrapper.Serialize(DynamicObjectSaver, "dyn.xml"); DynamicObjectSaver dloaded = (DynamicObjectSaver)SerializatorWrapper.Desserialize <DynamicObjectSaver>("dyn.xml"); SimpleModel simpleModel = new SimpleModel(factory, dloaded.modelName); simpleModel.SetTexture(factory.CreateTexture2DColor(1, 1, Color.Green), TextureType.DIFFUSE); SphereObject tmesh = new SphereObject(dloaded.position, 1, 10, dloaded.scale.X, MaterialDescription.DefaultBepuMaterial()); tmesh.Rotation = dloaded.orientation; tmesh.Velocity = dloaded.LinearVelocity; tmesh.AngularVelocity = dloaded.AngularVelocity; ForwardXNABasicShader shader = new ForwardXNABasicShader(ForwardXNABasicShaderDescription.Default()); ForwardMaterial fmaterial = new ForwardMaterial(shader); obj = new IObject(fmaterial, simpleModel, tmesh); this.World.AddObject(obj); saved++; } )); this.World.CameraManager.AddCamera(new CameraFirstPerson(GraphicInfo)); }
void createObjects(MapSchema <ObjectState> objects) { objects.ForEach((string s, ObjectState ob) => { Debug.Log("Creating " + ob.type + " / [" + ((BoxObject)ob).halfSize.x + "]"); GameObject gameOb = null; SObject serverObject = null; if (ob.instantiate) { if (ob.GetType().Equals(typeof(SphereObject))) { SphereObject sphereState = (SphereObject)ob; if (ob.mesh.Length > 0) { //Debug.Log("Instantiating a mesh"); UnityEngine.Object prefab = Resources.Load(ob.mesh); // Assets/Resources/Prefabs/prefab1.FBX gameOb = (GameObject)Instantiate(prefab); } else { gameOb = GameObject.CreatePrimitive(PrimitiveType.Sphere); gameOb.GetComponent <Renderer>().material = material; } gameOb.name = "Esfera (" + ob.uID + ")"; float size = (sphereState.radius) * 2; gameOb.transform.localScale = new Vector3(size, size, size); serverObject = gameOb.AddComponent <SObject>(); serverObject.setState(sphereState); this.objects.Add(s, serverObject); } if (ob.GetType().Equals(typeof(BoxObject))) { BoxObject boxState = (BoxObject)ob; if (ob.mesh.Length > 0) { //Debug.Log("Instantiating a mesh"); UnityEngine.Object prefab = Resources.Load(ob.mesh); // Assets/Resources/Prefabs/prefab1.FBX gameOb = (GameObject)Instantiate(prefab); } else { gameOb = GameObject.CreatePrimitive(PrimitiveType.Cube); gameOb.GetComponent <Renderer>().material = material; } gameOb.name = ob.type + "(" + ob.uID + ")"; Vector3 size = new Vector3(boxState.halfSize.x, boxState.halfSize.y, boxState.halfSize.z); size.Scale(new Vector3(2, 2, 2)); gameOb.transform.localScale = size; serverObject = gameOb.AddComponent <SObject>(); serverObject.setState(boxState); this.objects.Add(s, serverObject); } gameOb.transform.parent = ServerObjects.transform; gameOb.transform.position = new Vector3(ob.position.x, ob.position.y, ob.position.z); gameOb.transform.rotation = new Quaternion(ob.quaternion.x, ob.quaternion.y, ob.quaternion.z, ob.quaternion.w); } if (gameOb != null) { /*gameOb.name = ob.type + " [" + ob.uID + "]"; * if (ob.owner.sessionId != "") * { * gameOb.name += "=> " + ob.owner.sessionId; * } * if (ob.type == "golfball") * { * Debug.Log("Creating GolfBall"); * GolfBall objComp = gameOb.AddComponent<GolfBall>(); * gameOb.layer = 8; * objComp.setState(ob); * // mMaterial = BallMaterial; * //this.golfballs.Add(ob.owner.sessionId, serverObject); * } * if (ob.type == "player") * { * Debug.Log("Creating player " + ob.owner.sessionId); * Player objComp = gameOb.AddComponent<Player>(); * gameOb.layer = 8; * objComp.setState(ob); * //mMaterial = BallMaterial; * // this.golfballs.Add(ob.owner.sessionId, serverObject); * } * if (ob.type == "trownobj") * { * // mMaterial = WallMaterial; * } * if (ob.type == "characer") * { * * } * if (ob.mesh.Length == 0) * { * // gameOb.GetComponent<Renderer>().material = mMaterial; * } * * gameOb.transform.position = new Vector3(ob.position.x, ob.position.y, ob.position.z); * gameOb.transform.rotation = new Quaternion(ob.quaternion.x, ob.quaternion.y, ob.quaternion.z, ob.quaternion.w); */ } }); }