가상세계 산사VR

가상세계도 지진이 있나요?

Cray Fall 2020. 9. 26. 20:01

가상세계 산사VR의 크레이 월드에서는 가끔 지진이 일어납니다.

가상세계의 지진

물론 인위적이긴 하지만요 ㅎㅎ
크레이 월드 어딘가 이런 표지판이 있을텐데요.
지진을 일으키는 방법이 소개되어 있습니다.

가상세계의 지진

스크립트 소스입니다 :)

using Sansar;
using Sansar.Script;
using Sansar.Simulation;
using System.Runtime.Serialization;
using System;

public class earthquakeScript : SceneObjectScript
{
    public double earthQuakeTime=0.0;

    [DisplayName("강도")]
    [DefaultValue(0.4)]
    public double strength = 0;
    public override void Init()
    {
        // 채팅 채널 0번으로부터 메시지 송신을 대기하고 메시지가 송신되면 
        // ChatMessage 콜백함수를 실행합니다.
        ScenePrivate.Chat.Subscribe(0, null, ChatMessage, true);
        
    }

    // ChatMessage 콜백 함수
    private void ChatMessage(int Channel, string Source, SessionId SourceId, ScriptId SourceScriptId, string Message)
    {
        if(Message.Equals("/earthquake"))
        {
            earthQuakeTime = 2;
            earthquake();
        }
    }

    void earthquake()
    {
        // 0번 좌표부터 시작
        Vector step1;
        Vector step2;

        double strength_p = strength;

        // 무한반복
        while (true)
        {
            if (earthQuakeTime <= 0) break;
                        
            step1 = new Vector(0, (float)strength_p, 0);
            step2 = new Vector(0, (float)-strength_p, 0);


            WaitFor(
                ObjectPrivate.Mover.AddTranslate, // 좌표 이동
                ObjectPrivate.Position + step1 ,  // 이동할 위치
                0.1,     // 이동에 소요하게 할 시간
                MoveMode.Linear); // 죽각이동모드

            WaitFor(
                ObjectPrivate.Mover.AddTranslate, // 좌표 이동
                ObjectPrivate.Position + step2,  // 이동할 위치
                0.1,     // 이동에 소요하게 할 시간
                MoveMode.Linear); // 죽각이동모드

            earthQuakeTime -= 0.2;
            strength_p *= 0.7;
        }
    }
}