protected sealed override void CallbackTransport(shared.EffectEventType eType, shared.Effect cEffect) { if (null != _cAtom) { switch (eType) { case shared.EffectEventType.prepared: _cAtom.OnPrepared(cEffect); break; case shared.EffectEventType.started: _cAtom.OnStarted(cEffect); break; case shared.EffectEventType.stopped: _cAtom.OnStopped(cEffect); break; case shared.EffectEventType.failed: _cAtom.OnStopped(cEffect); break; default: throw new Exception("неизвестный тип события:" + eType.ToString()); //TODO LANG } } else (new Logger()).WriteWarning("effect:callback:transport: atom is null [" + eType.ToString() + "]"); }
//************************************************************************************************************************************************* //Get components void Start() { Root = transform.Find("Ammo/root"); Body = transform.Find("Ammo/root/body"); Head = transform.Find("Ammo/root/body/head"); Tentacles = transform.Find("Ammo/root/body/head/tentacles"); Left0 = transform.Find("Ammo/root/body/head/tentacles/left center0"); Left1 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1"); Left2 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2"); Left3 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3"); Left4 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3/left center4"); Left5 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3/left center4/left center5"); Left6 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3/left center4/left center5/left center6"); Left7 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3/left center4/left center5/left center6/left center7"); Left8 = transform.Find("Ammo/root/body/head/tentacles/left center0/left center1/left center2/left center3/left center4/left center5/left center6/left center7/left center8"); Right0 = transform.Find("Ammo/root/body/head/tentacles/right center0"); Right1 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1"); Right2 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2"); Right3 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3"); Right4 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3/right center4"); Right5 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3/right center4/right center5"); Right6 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3/right center4/right center5/right center6"); Right7 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3/right center4/right center5/right center6/right center7"); Right8 = transform.Find("Ammo/root/body/head/tentacles/right center0/right center1/right center2/right center3/right center4/right center5/right center6/right center7/right center8"); source = GetComponents <AudioSource>(); shared = GetComponent <shared>(); body = GetComponent <Rigidbody>(); anm = GetComponent <Animator>(); }
//*********************************************************************************************************************************************************************************************************** // FIND PLAYER FOOD bool FindPlayerFood() { //Find carnivorous food (looking for a dead creature in range) if(regime.Equals("Carnivorous")) { foreach (GameObject element in manager.creaturesList.ToArray()) { if((element.transform.position-fixedHeadPos).magnitude>scale.z) continue; //not in range shared otherCreature= element.GetComponent<shared>(); //Get other creature script if(otherCreature.IsDead) { objectTGT=otherCreature.gameObject; vectorTGT = otherCreature.body.worldCenterOfMass; return true; } // meat found } } else { //Find herbivorous food (looking for trees/details on terrain in range ) if(manager.terrain) { //Large creature, look for trees if(withersSize>8) { Vector3 V1=Vector3.zero; float i=0; RaycastHit hit; while(i<360) { V1=transform.position+(Quaternion.Euler(0, i, 0)*Vector3.forward*(scale.y*2)); if(Physics.Linecast(V1+Vector3.up*withersSize, transform.position+Vector3.up*withersSize, out hit, manager.treeLayer)) { vectorTGT = hit.point; return true; } //tree found else { i++; V1=Vector3.zero; } // not found, continue } } //Look for grass detail else { TerrainData data=manager.terrain.terrainData; int res= data.detailResolution, layer=0; float x = ((transform.position.x - manager.terrain.transform.position.x) / data.size.z * res), y = ((transform.position.z - manager.terrain.transform.position.z) / data.size.x * res); for(layer=0; layer<data.detailPrototypes.Length; layer++) { if(data.GetDetailLayer( (int) x, (int) y, 1, 1, layer) [ 0, 0]>0) { vectorTGT.x=(data.size.x/res)*x+manager.terrain.transform.position.x; vectorTGT.z=(data.size.z/res)*y+manager.terrain.transform.position.z; vectorTGT.y = manager.terrain.SampleHeight( new Vector3(vectorTGT.x, 0, vectorTGT.z)); objectTGT=null; return true; } } } } } objectTGT=null; vectorTGT=Vector3.zero; return false; //nothing found... }
protected sealed override void ContainerCallbackTransport(shared.ContainerEventType eType, shared.Effect cEffect) { (new Logger()).WriteDebug4("container:callback:transport:in:" + eType.ToString()); if (null != _cAtom) { if (_cAtom is Container) { Container cContainer = (Container)_cAtom; switch (eType) { case shared.ContainerEventType.added: cContainer.OnEffectAdded(cEffect); break; case shared.ContainerEventType.prepared: cContainer.OnEffectPrepared(cEffect); break; case shared.ContainerEventType.started: cContainer.OnEffectStarted(cEffect); break; case shared.ContainerEventType.stopped: cContainer.OnEffectStopped(cEffect); break; case shared.ContainerEventType.onscreen: cContainer.OnEffectOnScreen(cEffect); break; case shared.ContainerEventType.offscreen: cContainer.OnEffectOffScreen(cEffect); break; case shared.ContainerEventType.failed: cContainer.OnEffectFailed(cEffect); break; default: throw new Exception("неизвестный тип события контейнера:" + eType.ToString()); //TODO LANG } } else throw new Exception("эффект не является контейнером:" + _cAtom.ToString() + ". событие контейнера:" + eType.ToString()); //TODO LANG } else (new Logger()).WriteWarning("container:callback:transport: atom is null [" + eType.ToString() + "]"); (new Logger()).WriteDebug4("container:callback:transport:out:" + eType.ToString()); }
//************************************************************************************************************************************************* //Get components void Start() { Right_Hips = transform.Find("Comp/root/pelvis/right leg0"); Right_Leg = transform.Find("Comp/root/pelvis/right leg0/right leg1"); Right_Foot0 = transform.Find("Comp/root/pelvis/right leg0/right leg1/right foot0"); Right_Foot1 = transform.Find("Comp/root/pelvis/right leg0/right leg1/right foot0/right foot1"); Left_Hips = transform.Find("Comp/root/pelvis/left leg0"); Left_Leg = transform.Find("Comp/root/pelvis/left leg0/left leg1"); Left_Foot0 = transform.Find("Comp/root/pelvis/left leg0/left leg1/left foot0"); Left_Foot1 = transform.Find("Comp/root/pelvis/left leg0/left leg1/left foot0/left foot1"); Tail0 = transform.Find("Comp/root/pelvis/tail0"); Tail1 = transform.Find("Comp/root/pelvis/tail0/tail1"); Tail2 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2"); Tail3 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3"); Tail4 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3/tail4"); Tail5 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3/tail4/tail5"); Tail6 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3/tail4/tail5/tail6"); Tail7 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3/tail4/tail5/tail6/tail7"); Tail8 = transform.Find("Comp/root/pelvis/tail0/tail1/tail2/tail3/tail4/tail5/tail6/tail7/tail8"); Spine0 = transform.Find("Comp/root/spine0"); Spine1 = transform.Find("Comp/root/spine0/spine1"); Spine2 = transform.Find("Comp/root/spine0/spine1/spine2"); Spine3 = transform.Find("Comp/root/spine0/spine1/spine2/spine3"); Spine4 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4"); Spine5 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5"); Arm1 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/left arm0"); Arm2 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/right arm0"); Neck0 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/neck0"); Neck1 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/neck0/neck1"); Neck2 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/neck0/neck1/neck2"); Neck3 = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/neck0/neck1/neck2/neck3"); Head = transform.Find("Comp/root/spine0/spine1/spine2/spine3/spine4/spine5/neck0/neck1/neck2/neck3/head"); source = GetComponents <AudioSource>(); shared = GetComponent <shared>(); body = GetComponent <Rigidbody>(); anm = GetComponent <Animator>(); }
//Spawn water particle FX void WaterParticleFX(Collider col, ParticleSystem particleFx) { count += Time.fixedDeltaTime; ParticleSystem particle = null; shared creatureScript = null; //Check if object has a Rigidbody component if (col.transform.root.GetComponent <Rigidbody>()) { //Check his tag (must be a JP Creature with "shared" script attached) if (col.transform.root.tag == "Creature") { creatureScript = col.transform.root.GetComponent <shared>(); //Get creature script creatureScript.waterY = transform.position.y; //Set creature current water layer altitude if (!creatureScript.IsVisible) { return; //Check if creature is visible } if (particleFx == ripples && count < creatureScript.loop % 5) { return; //prevent particle overflow } SkinnedMeshRenderer rend = creatureScript.rend[0]; //Check if the creature bounds are in contact with the water surface if (rend.bounds.Contains(new Vector3(col.transform.position.x, transform.position.y, col.transform.position.z))) { //Check if the creature rigidbody are in motion if (!creatureScript.anm.GetInteger("Move").Equals(0) | (creatureScript.CanFly && creatureScript.OnLevitation) | creatureScript.IsJumping | creatureScript.IsAttacking) { if (particleFx == splash && (!creatureScript.IsOnGround | creatureScript.IsJumping)) { col.transform.root.GetComponents <AudioSource>()[1].pitch = Random.Range(0.5f, 0.75f); col.transform.root.GetComponents <AudioSource>()[1].PlayOneShot(Largesplash, Random.Range(0.5f, 0.75f)); } else { particleFx = ripples; } } else { return; } //The spawn position Vector2 pos = new Vector2(rend.bounds.center.x, rend.bounds.center.z); //Spawn the particle prefab particle = Instantiate(particleFx, new Vector3(pos.x, transform.position.y + 0.01f, pos.y), Quaternion.Euler(-90, 0, 0)) as ParticleSystem; //Set particle size relative to creature size x float size = rend.bounds.size.magnitude / 10; //particle.transform.localScale=new Vector3(size,size, size); particle.transform.localScale = new Vector3(size, size, size); //Destroy particle after 3 sec DestroyObject(particle.gameObject, 3.0f); count = 0; } } } }
static void EffectVideo_OnCUDASet(shared.Effect cSender, bool nValue) { try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:layer:set: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); ((BTL.Play.EffectVideo)cEffectCover.oEffect).bCUDA = nValue; } catch (Exception ex) { (new Logger()).WriteError(ex); } }
internal void OnEffectStarted(shared.Effect cEffect) { if (null != EffectStarted) EffectStarted(this, ItemGet(cEffect).cEffect); }
internal void OnEffectFailed(shared.Effect cEffect) { Item cItem = ItemGet(cEffect); if (null != cItem) { if (null != EffectFailed) // null == cItem бывает, если удалили элемент плейлиста с помощью PLItemsDelete и он уже отремувлен похоже... EffectFailed(this, cItem.cEffect); ItemRemove(cItem); } }
void OnStopped(shared.Effect cEffect) { lock (_oSyncRoot) { if (_bDone) return; _bDone = true; } if (null != Stopped) Stopped(this); }
void FixedUpdate() { if(!UseManager) return; shared creatureScript=null; //If creature not found, switch to free camera mode if(creaturesList.Count==0) CameraMode=0; else if(!creaturesList[selected] | !creaturesList[selected].activeInHierarchy) CameraMode=0; else creatureScript=creaturesList[selected].GetComponent<shared>(); //Get creature script if(creatureScript) { //Creature select (Shortcut Key) if(Input.GetKeyDown(KeyCode.X)) { if(selected > 0) selected--; else selected=creaturesList.Count-1; } else if(Input.GetKeyDown(KeyCode.Y)) { if(selected < creaturesList.Count-1) selected++; else selected=0; } //Change View (Shortcut Key) if(Input.GetKeyDown(KeyCode.C)) { if(CameraMode==2) CameraMode=0; else CameraMode++; } //Use AI (Shortcut Key) if(Input.GetKeyDown(KeyCode.I)) { if(creatureScript.AI) creatureScript.AI=false; else creatureScript.AI=true; } } //Prevent camera from going into terrain if(terrain && (terrain.SampleHeight(transform.root.position)+terrain.GetPosition().y)>transform.root.position.y-1.0f) { body.velocity = new Vector3(body.velocity.x, 0, body.velocity.z); transform.root.position=new Vector3(transform.root.position.x, (terrain.SampleHeight(transform.root.position)+terrain.GetPosition().y)+1.0f, transform.root.position.z); } switch(CameraMode) { //Free case 0: //Weapon fire exemple ExempleFire(); playerCollider.isTrigger=false; if(source.clip==null) source.clip=Wind; else if(source.clip==Wind) { if(source.isPlaying) { source.volume=body.velocity.magnitude/128; source.pitch=source.volume; } else source.PlayOneShot(Wind); } Vector3 dir=Vector3.zero; float y=0; if(Input.GetKey(KeyCode.LeftShift)) body.mass=0.025f; else body.mass=0.1f; body.drag=1.0f; if(Cursor.lockState==CursorLockMode.Locked | Input.GetKey(KeyCode.Mouse2)) { vx=vx+Input.GetAxis("Mouse X")*sensivity; //rotate cam X axe vy=Mathf.Clamp(InvertYAxis?vy+Input.GetAxis("Mouse Y")*sensivity:vy-Input.GetAxis("Mouse Y")*sensivity, -89.9f, 89.9f); //rotate cam Y axe transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.AngleAxis(vx, Vector3.up)*Quaternion.AngleAxis(vy, Vector3.right), 0.1f); } if(Input.GetKey(KeyCode.Space)) y=1; else if(Input.GetKey(KeyCode.LeftControl)) y=-1; else y=0; dir=transform.rotation*new Vector3(Input.GetAxis("Horizontal"), y, Input.GetAxis("Vertical")); //move body.AddForce(dir*(transform.root.position-(transform.root.position+dir)).magnitude); break; //Follow camera case 1: playerCollider.isTrigger=true; body.mass=1.0f; body.drag=10.0f; float size = creatureScript.withersSize; if(Cursor.lockState==CursorLockMode.Locked | Input.GetKey(KeyCode.Mouse2)) { if(Input.GetKey(KeyCode.Mouse1)) { vx=creaturesList[selected].transform.eulerAngles.y; //lock camera to creature angle if(creatureScript.OnLevitation) { vy=Mathf.Clamp(Mathf.Lerp(vy, creatureScript.anm.GetFloat("Pitch")*90, 0.01f), -45f, 90f); }//pitch flying creature with camera axe else { vy=Mathf.Clamp(InvertYAxis?vy-Input.GetAxis("Mouse Y")*sensivity : vy+Input.GetAxis("Mouse Y")*sensivity, -90f, 90f); } //rotate cam Y axe } else if(!Input.GetKey(KeyCode.Mouse2) | Cursor.lockState!=CursorLockMode.Locked) { vx=vx+Input.GetAxis("Mouse X")*sensivity; //rotate cam X axe vy=Mathf.Clamp(InvertYAxis?vy-Input.GetAxis("Mouse Y")*sensivity:vy+Input.GetAxis("Mouse Y")*sensivity, -90f, 90f); //rotate cam Y axe } } vz=Mathf.Clamp(vz-Input.GetAxis("Mouse ScrollWheel")*10, size, size*32f); //zoom cam Z axe transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(vy, vx, 0.0f), 0.1f); Vector3 pos=((creaturesList[selected].transform.root.position+Vector3.up*size*1.5f)-transform.root.position)-transform.forward*vz; body.AddForce(pos*128f); break; // POV camera case 2: playerCollider.isTrigger=true; size = creatureScript.withersSize; transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation((creaturesList[selected].transform.root.position+Vector3.up*size*1.5f)-transform.root.position), 0.1f); break; default: CameraMode=0; break; } }
void Atom.IContainer.OnEffectFailed(shared.Effect cEffect) { this.OnEffectFailed(cEffect); }
void OnPrepared(shared.Effect cEffect) { if (null != Prepared) { (new Logger()).WriteDebug3("before Prepared(this)"); Prepared(this); (new Logger()).WriteDebug4("after Prepared(this)"); } else (new Logger()).WriteDebug3("empty Prepared"); }
void OnGUI () { if(!UseManager) return; float sw =Screen.width, sh= Screen.height; shared creatureScript=null; if(creaturesList.Count>0 && creaturesList[selected] && creaturesList[selected].activeInHierarchy) creatureScript=creaturesList[selected].GetComponent<shared>(); //Get creature script GUIStyle style = new GUIStyle("box"); style.fontSize=16; if(Cursor.lockState==CursorLockMode.None) { //Show creature info on toolbar & Camera mode select if(creatureScript&&CameraMode!=0) { GUI.Box(new Rect(0, 0, sw, 50), creaturesList[selected].name); GUI.color=Color.yellow; if(GUI.Button(new Rect(0,5, (sw/16)-4, 20), "Free")) CameraMode=0; if(CameraMode==1) GUI.color=Color.green; if(GUI.Button(new Rect((sw/16)*1.5f, 5, (sw/16)-4, 20), "Follow")) CameraMode=1; GUI.color=Color.yellow; if(CameraMode==2) GUI.color=Color.green; if(GUI.Button(new Rect((sw/16)*3.0f, 5, (sw/16)-4, 20), "POV")) CameraMode=2; } else { GUI.Box(new Rect(0, 0, sw, 50), "", style); if(creatureScript) { GUI.color=Color.green; GUI.Button(new Rect(0,5, (sw/16)-4, 20), "Free"); GUI.color=Color.yellow; if(GUI.Button(new Rect((sw/16)*1.5f, 5, (sw/16)-4, 20), "Follow")) CameraMode=1; if(GUI.Button(new Rect((sw/16)*3.0f, 5, (sw/16)-4, 20), "POV")) CameraMode=2; } } GUI.color=Color.white; Cursor.visible = true; //Toolbar tabs if(!ShowGUI) GUI.Box(new Rect(0, 0, sw, 50), ""); string[] toolbarStrings = new string[] {"File", "Creatures", "Options", "Help"}; GUI.color=Color.yellow; toolBarTab = GUI.Toolbar(new Rect(0, 30, sw, 20), toolBarTab, toolbarStrings); GUI.color=Color.white; switch(toolBarTab) { //File case 0: GUI.Box (new Rect(0, 50, sw, sh-50), "", style); if(GUI.Button(new Rect((sw/2)-60, (sh/2)-35, 120, 30), "Reset")) SceneManager.LoadScene(0); //Reset if(GUI.Button (new Rect((sw/2)-60, (sh/2)+5, 120, 30), "Quit")) Application.Quit(); //Quit break; //Creatures case 1: if(creatureScript) { // Creature box GUI.Box (new Rect(0, 50, sw*0.25f, (sh*0.75f)-50),""); // Creature name - rename field string rename=creaturesList[selected].name; creaturesList[selected].name=GUI.TextField(new Rect(25, 50, sw*0.25f-25, 25), rename, style); //Delete button if(GUI.Button (new Rect(0, 50, 25, 25), "X")) { Destroy(creaturesList[selected].gameObject); creaturesList.RemoveAt(selected); if(selected>0) selected--; else if(creaturesList.Count>0) selected=creaturesList.Count-1; else return; } //Browse Creatures if(browser) { if(GUI.Button (new Rect(0, 75, (sw*0.25f), 25), "Close Browser" )) browser=false; GUI.Box (new Rect(0, 100, sw*0.25f, (sh*0.75f)-100),"Creatures : "+creaturesList.Count); scroll1 = GUI.BeginScrollView(new Rect(0, 130, sw*0.25f, (sh*0.75f)-140), scroll1, new Rect(0, 0, 270, creaturesList.Count*40), false, true); int end_i=creaturesList.Count, start=Mathf.RoundToInt(scroll1.y/40); end_i=Mathf.Clamp(end_i, start , start+Mathf.RoundToInt((sh*0.75f)/40)); for(int i=start; i<end_i; i++) { float line = 40*i; //green light for current selected creature if(selected!=i) GUI.color=Color.gray; else GUI.color=Color.white; //draw creature array num GUI.Label (new Rect(5, line, sw*0.25f-30, 25), (i+1)+". " ); // delete button if(GUI.Button (new Rect(30, line, 20, 20), "X" )) { if(i<=selected && selected>0 | selected==creaturesList.Count-1) selected--; Destroy(creaturesList[i].gameObject); creaturesList.RemoveAt(i); return; } //button show creature name/select creature if(GUI.Button (new Rect(50, line, 140, 20), creaturesList[i].name )) { selected=i; CameraMode=1; } if(GUI.Button (new Rect(190, line, 40, 20), "Edit" )) { selected=i; browser=false; } //get creature script shared Script= creaturesList[i].gameObject.GetComponent<shared>(); //show current creature behavior GUI.Label (new Rect(235, line, sw*0.25f-30, 25), Script.behavior+" "+Script.behaviorCount); //browser health bar Rect bar= new Rect(0, 0, 0.1f, 0.1f); GUI.color=Color.black; GUI.DrawTextureWithTexCoords(new Rect(30, line+22, 50, 4), icons, bar, false); GUI.DrawTextureWithTexCoords(new Rect(85, line+22, 50, 4), icons, bar, false); GUI.color=Color.green; GUI.DrawTextureWithTexCoords(new Rect(30, line+22, Script.Health/2, 4), icons, bar, false); GUI.color=Color.yellow; GUI.DrawTextureWithTexCoords(new Rect(85,line+22, Script.Food/2, 4), icons, bar, false); if(!Script.CanSwim) { GUI.color=Color.black; GUI.DrawTextureWithTexCoords(new Rect(140, line+22, 50, 4), icons, bar, false); GUI.DrawTextureWithTexCoords(new Rect(195, line+22, 50, 4), icons, bar, false); GUI.color=Color.cyan; GUI.DrawTextureWithTexCoords(new Rect(140, line+22, Script.Water/2, 4), icons, bar, false); GUI.color=Color.gray; GUI.DrawTextureWithTexCoords(new Rect(195,line+22, Script.Fatigue/2, 4), icons, bar, false); } } GUI.EndScrollView(); } else { //Start browse if(GUI.Button (new Rect((sw*0.25f)/4, 75, (sw*0.25f)/2, 20), "Browse : "+(selected+1)+"/"+creaturesList.Count )) browser=true; //Creature select if(GUI.Button (new Rect(0, 75, (sw*0.25f)/4, 20), "<<")) { if(selected>0) selected--; else selected=creaturesList.Count-1; } if(GUI.Button (new Rect(((sw*0.25f)/4)*3, 75, (sw*0.25f)/4, 20), ">>")) { if(selected < creaturesList.Count-1) selected++; else selected=0; } scroll1 = GUI.BeginScrollView(new Rect(0, 110, sw*0.25f, (sh*0.75f)-110), scroll1, new Rect(0, 0, 0, 430), false, true); //AI on/off if(creatureScript.AI) { GUI.color=Color.gray; if(GUI.Button (new Rect(sw*0.25f/2, 0, sw*0.25f/2-20, 25), "Player")) creatureScript.SetAI(false); GUI.color=Color.green; GUI.Box (new Rect(10, 0, sw*0.25f/2-10, 25), "A.I. : "+creatureScript.behavior ); } else { GUI.color=Color.green; GUI.Box (new Rect(sw*0.25f/2, 0, sw*0.25f/2-20, 25), "Player"); GUI.color=Color.gray; if(GUI.Button (new Rect(10, 0, sw*0.25f/2-10, 25), "A.I." )) creatureScript.SetAI(true); } GUI.color=Color.white; //Model materials int body= creatureScript.BodySkin.GetHashCode(); int eyes= creatureScript.EyesSkin.GetHashCode(); if(GUI.Button (new Rect(10, 30, sw*0.25f-30, 25), "Body Skin : "+creatureScript.BodySkin)) { if(body<2) body++; else body=0; creatureScript.SetMaterials(body, eyes); } if(GUI.Button (new Rect(10, 60, sw*0.25f-30, 25), "Eyes Skin : "+creatureScript.EyesSkin)) { if(eyes<15)eyes++; else eyes=0; creatureScript.SetMaterials(body, eyes); } //Model scale float Scale=creaturesList[selected].transform.localScale.x; GUI.Box(new Rect(10, 90, sw*0.25f-30, 25), "Scale : "+Mathf.Round(Scale*100)/100); Scale=GUI.HorizontalSlider(new Rect(10, 110, sw*0.25f-30, 25), Scale, 0.1f, 1.0f); if(Scale!=creaturesList[selected].transform.localScale.x) creaturesList[selected].SendMessage("SetScale", Mathf.Round(Scale*100)/100); //Animation speed float Speed= creatureScript.AnimSpeed; GUI.Box(new Rect(10, 125, sw*0.25f-30, 25), "Animation Speed : "+Mathf.Round(Speed*100)/100); creatureScript.AnimSpeed=GUI.HorizontalSlider(new Rect(10, 145, sw*0.25f-30, 25), Speed, 0.0f, 2.0f); //Health float Health=creatureScript.Health; GUI.Box(new Rect(10, 160, sw*0.25f-30, 25), "Health : "+Mathf.Round(Health*10)/10); Health=GUI.HorizontalSlider(new Rect(10, 180, sw*0.25f-30, 25), creatureScript.Health, 0, 100); creatureScript.Health =Health; //Food float Food=creatureScript.Food; GUI.Box(new Rect(10, 200, sw*0.25f-30, 20), "Food : "+Mathf.Round(Food*10)/10); Food=GUI.HorizontalSlider(new Rect(10, 220, sw*0.25f-30, 20), creatureScript.Food, 0, 100); creatureScript.Food =Food; if(!creatureScript.CanSwim) { //Water float Water=creatureScript.Water; GUI.Box(new Rect(10, 240, sw*0.25f-30, 20), "Water : "+Mathf.Round(Water*10)/10); Water=GUI.HorizontalSlider(new Rect(10, 260, sw*0.25f-30, 20), creatureScript.Water, 0, 100); creatureScript.Water =Water; //Fatigue float Fatigue=creatureScript.Fatigue; GUI.Box(new Rect(10, 280, sw*0.25f-30, 20), "Fatigue : "+Mathf.Round(Fatigue*10)/10); Fatigue=GUI.HorizontalSlider(new Rect(10, 300, sw*0.25f-30, 20), creatureScript.Fatigue, 0, 100); creatureScript.Fatigue =Fatigue; } else { GUI.Box(new Rect(10, 240, sw*0.25f-30, 20), "Water : N/A"); GUI.Box(new Rect(10, 280, sw*0.25f-30, 20), "Fatigue : N/A"); } //Damage float Damage=creatureScript.DamageMultiplier; GUI.Box(new Rect(10, 320, sw*0.25f-30, 20), "Damages X"+Mathf.Round(creatureScript.DamageMultiplier*100)/100); Damage=GUI.HorizontalSlider(new Rect(10, 340, sw*0.25f-30, 20), creatureScript.DamageMultiplier, 1, 10); creatureScript.DamageMultiplier=Damage; //Armor float Armor=creatureScript.ArmorMultiplier; GUI.Box(new Rect(10, 360, sw*0.25f-30, 20), "Armor X"+Mathf.Round(creatureScript.ArmorMultiplier*100)/100); Armor=GUI.HorizontalSlider(new Rect(10, 380, sw*0.25f-30, 20), creatureScript.ArmorMultiplier, 1, 10); creatureScript.ArmorMultiplier=Armor; GUI.EndScrollView(); } } else GUI.Box (new Rect(0, 50, sw*0.25f, (sh*0.75f)-50), "None", style); //Add new creature GUI.color=Color.yellow; if(addCreatureTab==-2) { if(GUI.Button (new Rect(0, sh*0.75f, sw*0.25f, 25), "")) addCreatureTab=-1; GUI.Box(new Rect(0, sh*0.75f, sw/4, sh/4), "Add a new creature", style); } else if(addCreatureTab==-1) { if(GUI.Button (new Rect(0, sh*0.75f, sw*0.25f, 25), "")) addCreatureTab=-2; GUI.Box(new Rect(0, sh*0.75f, sw/4, sh/4), "Cancel", style); GUI.Box(new Rect(sw/4, 50, sw*0.75f, sh-50), "Select a specie", style); scroll2 = GUI.BeginScrollView(new Rect(sw/4, sh/4, sw*0.75f, sh*0.75f), scroll2, new Rect(0, 0, 740, 290)); //Volume I GUI.color=Color.yellow; GUI.Box(new Rect(25, 0, 140, 25), "Vol. I", style); CheckCollection("Ankylosaurus", new Rect(25, 30, 140, 20)); CheckCollection("Brachiosaurus", new Rect(25, 50, 140, 20)); CheckCollection("Compsognathus", new Rect(25, 70, 140, 20)); CheckCollection("Dilophosaurus", new Rect(25, 90, 140, 20)); CheckCollection("Dimetrodon", new Rect(25, 110, 140, 20)); CheckCollection("Oviraptor", new Rect(25, 130, 140, 20)); CheckCollection("Parasaurolophus", new Rect(25, 150, 140, 20)); CheckCollection("Pteranodon", new Rect(25, 170, 140, 20)); CheckCollection("Spinosaurus", new Rect(25, 190, 140, 20)); CheckCollection("Stegosaurus", new Rect(25, 210, 140, 20)); CheckCollection("Triceratops", new Rect(25, 230, 140, 20)); CheckCollection("Tyrannosaurus Rex", new Rect(25, 250, 140, 20)); CheckCollection("Velociraptor", new Rect(25, 270, 140, 20)); //Volume II GUI.color=Color.yellow; GUI.Box(new Rect(170, 0, 140, 25), "Vol. II", style); CheckCollection("Argentinosaurus", new Rect(170, 30, 140, 20)); CheckCollection("Baryonyx", new Rect(170, 50, 140, 20)); CheckCollection("Carnotaurus", new Rect(170, 70, 140, 20)); CheckCollection("Dimorphodon", new Rect(170, 90, 140, 20)); CheckCollection("Gallimimus", new Rect(170, 110, 140, 20)); CheckCollection("Iguanodon", new Rect(170, 130, 140, 20)); CheckCollection("Kentrosaurus", new Rect(170, 150, 140, 20)); CheckCollection("Ouranosaurus", new Rect(170, 170, 140, 20)); CheckCollection("Pachycephalosaurus", new Rect(170, 190, 140, 20)); CheckCollection("Protoceratops", new Rect(170, 210, 140, 20)); CheckCollection("Quetzalcoatlus", new Rect(170, 230, 140, 20)); CheckCollection("Styracosaurus", new Rect(170, 250, 140, 20)); CheckCollection("Troodon", new Rect(170, 270, 140, 20)); //Volume III GUI.color=Color.yellow; GUI.Box(new Rect(315, 0, 140, 25), "Vol. III", style); CheckCollection("Acrocanthosaurus", new Rect(315, 30, 140, 20)); CheckCollection("Allosaurus", new Rect(315, 50, 140, 20)); CheckCollection("Amargasaurus", new Rect(315, 70, 140, 20)); CheckCollection("Apatosaurus", new Rect(315, 90, 140, 20)); CheckCollection("Archaeopteryx", new Rect(315, 110, 140, 20)); CheckCollection("Ceratosaurus", new Rect(315, 130, 140, 20)); CheckCollection("Corythosaurus", new Rect(315, 150, 140, 20)); CheckCollection("Ornithocheirus", new Rect(315, 170, 140, 20)); CheckCollection("Pachyrhinosaurus", new Rect(315, 190, 140, 20)); CheckCollection("Postosuchus", new Rect(315, 210, 140, 20)); CheckCollection("Proganochelys", new Rect(315, 230, 140, 20)); CheckCollection("Psittacosaurus", new Rect(315, 250, 140, 20)); CheckCollection("Therizinosaurus", new Rect(315, 270, 140, 20)); //Volume IV GUI.color=Color.yellow; GUI.Box(new Rect(460, 0, 140, 25), "Vol. IV", style); CheckCollection("Ammonite", new Rect(460, 30, 140, 20)); CheckCollection("Anomalocaris", new Rect(460, 50, 140, 20)); CheckCollection("Archelon", new Rect(460, 70, 140, 20)); CheckCollection("Dunkleosteus", new Rect(460, 90, 140, 20)); CheckCollection("Giant Orthocone", new Rect(460, 110, 140, 20)); CheckCollection("Helicoprion", new Rect(460, 130, 140, 20)); CheckCollection("Ichthyosaur", new Rect(460, 150, 140, 20)); CheckCollection("Leedsichthys", new Rect(460, 170, 140, 20)); CheckCollection("Mosasaurus", new Rect(460, 190, 140, 20)); CheckCollection("Onchopristis", new Rect(460, 210, 140, 20)); CheckCollection("Sarcosuchus", new Rect(460, 230, 140, 20)); CheckCollection("Styxosaurus", new Rect(460, 250, 140, 20)); CheckCollection("Xenacanthus", new Rect(460, 270, 140, 20)); //Volume V GUI.color=Color.yellow; GUI.Box(new Rect(605, 0, 140, 25), "Vol. V", style); CheckCollection("Arthropleura", new Rect(605, 30, 140, 20)); CheckCollection("Coelacanth", new Rect(605, 50, 140, 20)); CheckCollection("Cynognathus", new Rect(605, 70, 140, 20)); CheckCollection("Diplocaulus", new Rect(605, 90, 140, 20)); CheckCollection("Euphoberia", new Rect(605, 110, 140, 20)); CheckCollection("Koolasuchus", new Rect(605, 130, 140, 20)); CheckCollection("Meganeuropsis", new Rect(605, 150, 140, 20)); CheckCollection("Megazostrodon", new Rect(605, 170, 140, 20)); CheckCollection("Nephila Jurassica", new Rect(605, 190, 140, 20)); CheckCollection("Palaeocharinus", new Rect(605, 210, 140, 20)); CheckCollection("Proceratocephala", new Rect(605, 230, 140, 20)); CheckCollection("Pulmonoscorpius", new Rect(605, 250, 140, 20)); CheckCollection("Stethacanthus", new Rect(605, 270, 140, 20)); GUI.EndScrollView(); } else { if(GUI.Button (new Rect(0, sh*0.75f, sw*0.25f, 25), "")) { addCreatureTab=-1; return; } GUI.Box(new Rect(0, sh*0.75f, sw/4, sh/4), "Select Creature : "+CollectionList[addCreatureTab].name, style); GUI.color=Color.white; scroll2 = GUI.BeginScrollView(new Rect(0, (sh*0.75f)+40, sw*0.25f, (sh*0.25f)-40), scroll2, new Rect(0, 0, 0, 130), false, true); //AI GUI.Box(new Rect(10, 0, sw*0.25f-30, 25), ""); spawnAI= GUI.Toggle (new Rect(18, 0, 120, 25), spawnAI, " Spawn with AI "); //Random GUI.Box(new Rect(10, 30, sw*0.25f-30, 25), ""); rndSkin= GUI.Toggle (new Rect(18, 30, 100, 25), rndSkin, " Random skin"); //Random size GUI.Box(new Rect(10, 60, sw*0.25f-30, 25), ""); rndSize= GUI.Toggle (new Rect(18, 60, 100, 25), rndSize, " Random size"); if(rndSize) { if(GUI.Button(new Rect(130, 60, sw*0.25f-150, 25), "Span : "+rndSizeSpan.ToString())) { if(rndSizeSpan<5) rndSizeSpan++; else rndSizeSpan=1; } } //Random setting GUI.Box(new Rect(10, 90, sw*0.25f-30, 25), ""); rndSetting= GUI.Toggle (new Rect(18, 90, sw*0.25f-30, 25), rndSetting, " Random health settings"); GUI.EndScrollView(); //Spawn new creature if(GUI.Button (new Rect(sw*0.6f, sh/2, 80, 60), "SPAWN !")) { GameObject spawncreature = Instantiate(CollectionList[addCreatureTab] ,transform.position+transform.forward*10, Quaternion.identity); shared script=spawncreature.GetComponent<shared>(); if(!spawnAI) CameraMode=1; script.AI=spawnAI; if(rndSkin) { script.SetMaterials(Random.Range(0, 3), Random.Range(0, 16)); } if(rndSize) { script.SetScale( 0.5f+Random.Range((float) rndSizeSpan/-10, (float) rndSizeSpan/10)); } else script.SetScale(0.5f); if(rndSetting) { script.Health =Random.Range(25,100); script.Fatigue =Random.Range(25,100); script.Food =Random.Range(25,100); script.Water =Random.Range(25,100); } spawncreature.name=CollectionList[addCreatureTab].name; creaturesList.Add(spawncreature.gameObject); selected = creaturesList.IndexOf(spawncreature.gameObject); //add creature to creature list } } break; //Options case 2: GUI.Box (new Rect(0, 50, sw, sh-50), "Options", style); //Screen GUI.Box(new Rect((sw/2)-225, (sh/2)-110, 150, 220), "Screen", style); bool fullScreen=Screen.fullScreen; fullScreen= GUI.Toggle (new Rect((sw/2)-220, (sh/2)-80, 140, 20), fullScreen, " Fullscreen"); if(fullScreen!=Screen.fullScreen) Screen.fullScreen=!Screen.fullScreen; ShowFPS= GUI.Toggle (new Rect((sw/2)-220, (sh/2)-40, 140, 20), ShowFPS, " Show Fps"); ShowGUI= GUI.Toggle (new Rect((sw/2)-220, (sh/2), 140, 20), ShowGUI, " Show GUI"); //Controls GUI.Box(new Rect((sw/2)-75, (sh/2)-110, 150, 220), "Controls", style); InvertYAxis = GUI.Toggle (new Rect((sw/2)-70, (sh/2)-80, 140, 20), InvertYAxis, " Invert Y Axe"); GUI.Label(new Rect((sw/2)-70, (sh/2)-40, 140, 20), "Sensivity"); sensivity=GUI.HorizontalSlider(new Rect((sw/2)-70, (sh/2), 140, 20), sensivity, 0.1f, 10.0f); //Creatures GUI.Box(new Rect((sw/2)+75, (sh/2)-110, 150, 220), "Creatures", style); UseIK= GUI.Toggle (new Rect((sw/2)+80, (sh/2)-80, 140, 20), UseIK, " Use IK"); UseRaycast= GUI.Toggle (new Rect((sw/2)+80, (sh/2)-40, 140, 20), UseRaycast, " Use Raycast"); RealtimeGame= GUI.Toggle (new Rect((sw/2)+80, (sh/2), 140, 20), RealtimeGame, " Realtime Game"); break; //Help case 3: GUI.Box (new Rect(0, 50, sw, sh-50), "Controls", style); GUI.DrawTexture(new Rect(0, 50, sw, sh-50), helpscreen); break; } } else Cursor.visible = false; if(creatureScript) { if(ShowGUI) { // Health bar if(CameraMode==1) { Rect ico1 = new Rect(0, 0.5f, 0.5f, 0.5f), ico2 = new Rect(0.5f, 0.5f, 0.5f, 0.5f), ico3 = new Rect(0.5f, 0, 0.5f, 0.5f), ico4 =new Rect(0, 0, 0.5f, 0.5f), bar=new Rect(0, 0, 0.1f, 0.1f); GUI.color=Color.white; //Icons GUI.DrawTextureWithTexCoords(new Rect(sw/4, sh/1.1f, sw/48, sw/48), icons, ico1, true); //health icon GUI.DrawTextureWithTexCoords(new Rect(sw/2, sh/1.1f, sw/48, sw/48), icons, ico2, true); //food icon if(!creatureScript.CanSwim) { GUI.DrawTextureWithTexCoords(new Rect(sw/2, sh/1.05f, sw/48, sw/48), icons, ico3, true); //water icon GUI.DrawTextureWithTexCoords(new Rect(sw/4, sh/1.05f, sw/48, sw/48), icons, ico4, true); //sleep icon } GUI.color=Color.black; //bar background GUI.DrawTextureWithTexCoords(new Rect(sw/3.5f, sh/1.09f, (sw*0.002f)*100, sh/100), icons, bar, false); GUI.DrawTextureWithTexCoords(new Rect(sw/1.85f, sh/1.09f, (sw*0.002f)* 100, sh/100), icons, bar, false); if(!creatureScript.CanSwim) { GUI.DrawTextureWithTexCoords(new Rect(sw/1.85f, sh/1.04f, (sw*0.002f)*100, sh/100), icons, bar, false); GUI.DrawTextureWithTexCoords(new Rect(sw/3.5f, sh/1.04f, (sw*0.002f)*100, sh/100), icons, bar, false); } GUI.color=Color.green; //health bar GUI.DrawTextureWithTexCoords(new Rect(sw/3.5f, sh/1.09f, (sw*0.002f)*creatureScript.Health, sh/100), icons, bar, false); GUI.color=Color.yellow; //food bar GUI.DrawTextureWithTexCoords(new Rect(sw/1.85f, sh/1.09f, (sw*0.002f)*creatureScript.Food, sh/100), icons, bar, false); if(!creatureScript.CanSwim) { GUI.color=Color.cyan; //water bar GUI.DrawTextureWithTexCoords(new Rect(sw/1.85f, sh/1.04f, (sw*0.002f)*creatureScript.Water, sh/100), icons, bar, false); GUI.color=Color.gray; //sleep bar GUI.DrawTextureWithTexCoords(new Rect(sw/3.5f, sh/1.04f, (sw*0.002f)*creatureScript.Fatigue, sh/100), icons, bar, false); } } } } //Fps GUI.color=Color.white; if(ShowFPS) GUI.Label(new Rect(sw-60, 1, 55, 20), "Fps : "+ fps); //Messages if(message!=0) { count++; if(message==1) GUI.Box(new Rect((sw/2)-120, sh/2, 240, 25), "Nothing to eat or drink...", style); else if(message==2) GUI.Box(new Rect((sw/2)-200, sh/2, 400, 25), "AI and IK features require 'JP Script Extension Asset' ", style); if(count==512) { count=0; message=0; } } }
void Atom.IContainer.OnEffectStopped(shared.Effect cEffect) { this.OnEffectStopped(cEffect); }
static bool EffectVideo_OnCUDAGet(shared.Effect cSender) { bool bRetVal = false; try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:layer:get: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); bRetVal = ((BTL.Play.EffectVideo)cEffectCover.oEffect).bCUDA; } catch (Exception ex) { (new Logger()).WriteError(ex); } return bRetVal; }
static void EffectVideo_OnDockSet(shared.Effect cSender, helpers.Dock cDock) { try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:dock:set: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); BTL.Play.EffectVideo cEffectVideoBTL; if (cEffectCover.oEffect is BTL.Play.EffectVideoAudio) cEffectVideoBTL = (BTL.Play.EffectVideo)(BTL.Play.EffectVideoAudio)cEffectCover.oEffect; else cEffectVideoBTL = (BTL.Play.EffectVideo)cEffectCover.oEffect; cEffectVideoBTL.cDock = cDock; } catch (Exception ex) { (new Logger()).WriteError(ex); } }
public static ulong Container_OnSumDurationGet(shared.Effect cSender) { ulong nRetVal = ulong.MaxValue; try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:sumduration:get: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); nRetVal = ((BTL.IContainer)cEffectCover.oEffect).nSumDuration; } catch (Exception ex) { (new Logger()).WriteError(ex); } return nRetVal; }
static bool Dispose(shared.Effect cEffect) { bool bRetVal = false; try { EffectCover cEffectCover = null; lock (_ahEffects) { if (_ahEffects.ContainsKey(cEffect)) { cEffectCover = _ahEffects[cEffect]; if (null == cEffectCover) (new Logger()).WriteDebug2("effect:dispose: is null [hc:" + cEffect.GetHashCode() + "]"); } else if(_ahEffectsRemoved.ContainsKey(cEffect)) bRetVal = true; } if (null != cEffectCover) { cEffectCover.Dispose(); bRetVal = true; } else if (!bRetVal) (new Logger()).WriteNotice("dispose: указанный эффект не зарегистрирован [hc:" + cEffect.GetHashCode() + "]"); //TODO LANG // не ошибка, т.к. он просто удален в GC } catch (Exception ex) { (new Logger()).WriteError(ex); } return bRetVal; }
static bool Stop(shared.Effect cEffect) { bool bRetVal = false; try { EffectCover cEffectCover = null; lock (_ahEffects) { if (_ahEffects.ContainsKey(cEffect)) cEffectCover = _ahEffects[cEffect]; } if (null != cEffectCover) { if (BTL.EffectStatus.Stopped != cEffectCover.eStatus) { cEffectCover.Stop(); bRetVal = true; } else (new Logger()).WriteDebug2("stop: указанный эффект уже остановлен [hc:" + cEffect.GetHashCode() + "]"); } else throw new Exception("stop: указанный эффект не зарегистрирован [hc:" + cEffect.GetHashCode() + "]"); //TODO LANG } catch (Exception ex) { (new Logger()).WriteError(ex); } return bRetVal; }
/// <summary> /// Constructor /// </summary> /// <param name="attribute"></param> public TreeNode(shared.Attribute attribute) { this.Attribute = attribute; this.Childs = new List<TreeNode>(); }
static helpers.Area EffectVideo_OnAreaGet(shared.Effect cSender) { helpers.Area stRetVal = helpers.Area.stEmpty; try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:area:get: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); stRetVal = ((BTL.Play.EffectVideo)cEffectCover.oEffect).stArea; } catch (Exception ex) { (new Logger()).WriteError(ex); } return stRetVal; }
void Atom.IContainer.OnEffectOffScreen(shared.Effect cEffect) { this.OnEffectOffScreen(cEffect); }
static void EffectVideo_OnAreaSet(shared.Effect cSender, helpers.Area stArea) { try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effect:area:set: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); if (helpers.Area.stEmpty != stArea) { BTL.Play.EffectVideo cEffectVideoBTL; if (cEffectCover.oEffect is BTL.Play.EffectVideoAudio) cEffectVideoBTL = (BTL.Play.EffectVideo)(BTL.Play.EffectVideoAudio)cEffectCover.oEffect; else cEffectVideoBTL = (BTL.Play.EffectVideo)cEffectCover.oEffect; cEffectVideoBTL.stArea = stArea; } } catch (Exception ex) { (new Logger()).WriteError(ex); } }
static private Status StatusTranslate(shared.Status eStatus) { switch (eStatus) { case shared.Status.Error: return Status.Error; case shared.Status.Idle: return Status.Idle; case shared.Status.Prepared: return Status.Prepared; case shared.Status.Started: return Status.Started; case shared.Status.Stopped: return Status.Stopped; } return Status.Unknown; }
static byte[] EffectVideoAudio_OnChannelGet(shared.Effect cSender) { byte[] aRetVal = null; try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effectvideoaudio:channels:get: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); aRetVal = ((BTL.Play.EffectVideoAudio)cEffectCover.oEffect).aChannelsAudio; } catch (Exception ex) { (new Logger()).WriteError(ex); } return aRetVal; }
void OnStarted(shared.Effect cEffect) { if (null != Started) { (new Logger()).WriteDebug3("before Started(this)"); Started(this); (new Logger()).WriteDebug4("after Started(this)"); } else (new Logger()).WriteDebug3("empty Started"); }
static void EffectVideoAudio_OnChannelSet(shared.Effect cSender, byte[] aValue) { try { EffectCover cEffectCover = EffectCoverGet(cSender); if (null == cEffectCover) throw new Exception("effectvideoaudio:channels:set: указанный объект не зарегистрирован на сервере [hc:" + cSender.GetHashCode() + "]"); ((BTL.Play.EffectVideoAudio)cEffectCover.oEffect).aChannelsAudio = aValue; } catch (Exception ex) { (new Logger()).WriteError(ex); } }
void OnFailed(shared.Effect cEffect) { lock (_oSyncRoot) //UNDONE !!!!!!!!!!!!!!!!!! просто скопировал со стоппеда { if (_bDone) return; _bDone = true; } if (null != Failed) Failed(this); }
static void EffectCreate(shared.Effect cEffect) { (new Logger()).WriteDebug3("in [hc:" + cEffect.GetHashCode() + "]"); EffectCover cEffectCover = null; lock (_ahEffects) { if (_ahEffects.ContainsKey(cEffect)) cEffectCover = _ahEffects[cEffect]; } if (null != cEffectCover) { (new Logger()).WriteDebug2("effect:create: effect exists [hc:" + cEffect.GetHashCode() + "]"); BTL.EffectStatus eES = (BTL.EffectStatus)cEffectCover.eStatus; if (BTL.EffectStatus.Stopped == eES || BTL.EffectStatus.Idle == eES) cEffectCover.Idle(); //Dispose(); надо бы его убивать вообще-то........ else throw new Exception("create: указанный эффект уже создан [hc:" + cEffect.GetHashCode() + "]"); //TODO LANG } else { lock (_ahEffects) { _ahEffects.Add(cEffect, null); } } (new Logger()).WriteDebug4("return [hc:" + cEffect.GetHashCode() + "]"); }
static void VideoCreate(shared.Video cVideoShared, string sFilename, helpers.Dock cDock, ushort nZ, ulong nFrameStart, ulong nDuration, bool bOpacity, ulong nDelay) //TODO убрать dock - его инициализация уже дублируется в userspace { BTL.Play.Video cVideoBTL = new BTL.Play.Video(sFilename); EffectCover cEffectCover = null; lock (_ahEffects) { EffectCreate(cVideoShared); _ahEffects[cVideoShared] = new EffectCover(cVideoBTL); cEffectCover = _ahEffects[cVideoShared]; } cEffectCover.sType = "Video"; cEffectCover.sInfo = sFilename; cVideoBTL.cDock = cDock; cVideoBTL.nLayer = nZ; cVideoBTL.nFrameStart = nFrameStart; cVideoBTL.nDuration = nDuration; cVideoBTL.bOpacity = bOpacity; cVideoBTL.nDelay = nDelay; }
static void AudioCreate(shared.Audio cAudioShared, string sFilename) { BTL.Play.Audio cAudioBTL = new BTL.Play.Audio(sFilename); EffectCover cEffectCover = null; lock (_ahEffects) { EffectCreate(cAudioShared); _ahEffects[cAudioShared] = new EffectCover(cAudioBTL); cEffectCover = _ahEffects[cAudioShared]; } cEffectCover.sType = "Audio"; cEffectCover.sInfo = sFilename; }
internal void OnEffectOffScreen(shared.Effect cEffect) { if (null != EffectOffScreen) EffectOffScreen(this, ItemGet(cEffect).cEffect); }
static void AnimationCreate(shared.Animation cAnimationShared, string sFolder, ushort nLoopsQty, bool bKeepAlive, helpers.Dock cDock, ushort nZ, bool bOpacity, ulong nDelay, float nPixelAspectRatio) { (new Logger()).WriteDebug3("in [bKeepAlive:" + bKeepAlive + "]"); BTL.Play.Animation cAnimationBTL = new BTL.Play.Animation(sFolder, nLoopsQty, bKeepAlive); EffectCover cEffectCover = null; lock (_ahEffects) { EffectCreate(cAnimationShared); _ahEffects[cAnimationShared] = new EffectCover(cAnimationBTL); cEffectCover = _ahEffects[cAnimationShared]; } cEffectCover.sType = "Animation"; cEffectCover.sInfo = sFolder; cAnimationBTL.cDock = cDock; cAnimationBTL.nLayer = nZ; cAnimationBTL.bOpacity = bOpacity; cAnimationBTL.nDelay = nDelay; cAnimationBTL.nPixelAspectRatio = nPixelAspectRatio; }
protected Item ItemGet(shared.Effect cEffect) { lock (_aItems) return _aItems.FirstOrDefault(o => o.cEffectShared == cEffect); }
static void TextCreate(shared.Text cTextShared, object[] aArgs) //EMERGENCY раскрыть массив в нормальные параметры!!!! { BTL.Play.Text cTextBTL = new BTL.Play.Text((string)aArgs[0], new Font((string)aArgs[1], (int)aArgs[2], (FontStyle)aArgs[3]), (float)aArgs[7]); EffectCover cEffectCover = null; lock (_ahEffects) { EffectCreate(cTextShared); _ahEffects[cTextShared] = new EffectCover(cTextBTL); cEffectCover = _ahEffects[cTextShared]; } cEffectCover.sType = "Text"; cEffectCover.sInfo = (string)aArgs[0]; cTextBTL.stColor = Color.FromArgb((int)(byte)aArgs[19], (int)(byte)aArgs[4], (int)(byte)aArgs[5], (int)(byte)aArgs[6]); cTextBTL.stColorBorder = Color.FromArgb((int)(byte)aArgs[20], (int)(byte)aArgs[8], (int)(byte)aArgs[9], (int)(byte)aArgs[10]); cTextBTL.cDock = new helpers.Dock((helpers.Dock.Corner)aArgs[21], (short)aArgs[11], (short)aArgs[12]); cTextBTL.nLayer = aArgs[13].ToUShort(); cTextBTL.nDelay = aArgs[14].ToULong(); cTextBTL.nDuration = aArgs[15].ToULong(); cTextBTL.bOpacity = (bool)aArgs[16]; cTextBTL.nInDissolve = (byte)aArgs[17]; cTextBTL.nOutDissolve = (byte)aArgs[18]; cTextBTL.nMaxOpacity = (byte)aArgs[19]; }
//*********************************************************************************************************************************************************************************************************** // MANAGE COLLISIONS, DAMAGES AND BLOOD FX public void ManageCollision(Collision col, float pitch_max, float crouch_max, AudioSource[] source, AudioClip pain, AudioClip Hit_jaw, AudioClip Hit_head, AudioClip Hit_tail) { //Exemple weapon collision if (col.gameObject.name.Equals("MyWeapon")) { SpawnBlood(col, source, pain, scale.z); //spawn blood, play creature pain sound Health -= Mathf.Clamp(20 - (scale.z * ArmorMultiplier), 0.1f, 100); //Take damages 20hp - armor value source[1].PlayOneShot(Hit_head, 1.0f); //hit sound Destroy(col.gameObject); //destroy projectil objectTGT = manager.transform.root.gameObject; // set the player gameobject to target lookTGT = objectTGT.gameObject; //look at target if (CanAttack) { behavior = "Battle"; } else { behavior = "ToFlee"; // attack if he can, else flee } behaviorCount = 1000; //duration of this behavior } //Creatures else if (col.transform.root.tag.Equals("Creature")) { shared otherCreature = col.gameObject.GetComponent <shared>(); //Get other creature script if (objectTGT == col.transform.root.gameObject) { objectCOL = objectTGT; } //A Creature attack me if (lastHit == 0 && otherCreature.IsAttacking) { float baseDamages = otherCreature.scale.z * otherCreature.DamageMultiplier; if (col.collider.gameObject.name.Equals("jaw0")) //bite damage { SpawnBlood(col, source, pain, scale.z); source[1].PlayOneShot(Hit_jaw, 1.0f); Health -= Mathf.Clamp(5 + baseDamages - (scale.z * ArmorMultiplier), 0.1f, 100); } else if (col.collider.gameObject.name.Equals("head")) //hit by head { body.AddExplosionForce(250, col.contacts[0].point, otherCreature.scale.z); SpawnBlood(col, source, pain, scale.z); source[1].PlayOneShot(Hit_head, 1.0f); if (regime.Equals("Carnivorous")) { Health -= Mathf.Clamp(10 + baseDamages - (scale.z * ArmorMultiplier), 0.1f, 100); } else { Health -= Mathf.Clamp(baseDamages - (scale.z * ArmorMultiplier), 0.1f, 100); } } else if (!col.collider.gameObject.name.Equals("root")) //other { body.AddExplosionForce(250, col.contacts[0].point, otherCreature.scale.z); SpawnBlood(col, source, pain, scale.z); source[1].PlayOneShot(Hit_tail, 1.0f); if (regime.Equals("Carnivorous")) { Health -= Mathf.Clamp(15 + baseDamages - (scale.z * ArmorMultiplier), 0.1f, 100); } else { Health -= Mathf.Clamp(baseDamages - (scale.z * ArmorMultiplier), 0.1f, 100); } } } //A carnivorous creature of a different species touches me if (objectTGT != otherCreature.gameObject && otherCreature.regime == "Carnivorous" && otherCreature.specie != specie) { if (otherCreature.scale.x > scale.x) { behaviorCount = 100; behavior = "ToFlee"; } else { behaviorCount = 100; objectTGT = otherCreature.gameObject; if (CanAttack) { behavior = "Battle"; } else { behavior = "ToFlee"; } } } //A creature touches me, look at else if (!lookTGT) { lookTGT = otherCreature.gameObject; } //Player attack, triggers behavior on other creature if (!AI && IsAttacking) { objectTGT = otherCreature.gameObject; otherCreature.objectTGT = transform.gameObject; behaviorCount = 1000; otherCreature.behaviorCount = 1000; if (otherCreature.specie == specie) { behavior = "Contest"; otherCreature.behavior = "Contest"; } else if (otherCreature.CanAttack) { behavior = "Battle"; otherCreature.behavior = "Battle"; } else { behavior = "Battle"; otherCreature.behavior = "ToFlee"; } } } //Other, is not the ground, not a target... avoid else if (objectCOL == null && behavior.StartsWith("To") && col.gameObject != objectTGT && col.contacts[0].point.y > (transform.position.y + withersSize / 4)) { objectCOL = col.gameObject; } }
public subClass2(shared s) { _shared = s; }